华为云用户手册

  • 创建用户和数据库并授予外表权限 以下示例,是新建一个普通用户dbuser并创建一个数据库mydatabase,然后使用管理员用户授予dbuser外表权限。 使用数据库管理员通过 GaussDB (DWS)提供的数据库客户端连接默认数据库gaussdb。 例如,使用gsql客户端的用户通过如下语句连接数据库: 1 gsql -d gaussdb -h 192.168.2.30 -U dbadmin -p 8000 -W password -r 新建一个普通用户,并用它创建一个数据库。 新建一个具有创建数据库权限的用户dbuser: 1 CREATE USER dbuser WITH CREATEDB PASSWORD 'password'; 切换为新建的用户: 1 SET ROLE dbuser PASSWORD 'password'; 执行以下命令创建数据库: 1 CREATE DATABASE mydatabase; 查询数据库: 1 SELECT * FROM pg_database; 返回结果中有mydatabase的信息表示创建成功: 1 2 3 4 5 6 7 8 9 10 datname | datdba | encoding | datcollate | datctype | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | dattablespace | datcompatibility | datacl ------------+--------+----------+------------+----------+---------------+--------------+--------------+---------------+--------------+---------------+------------------+-------------------------------------- -------------- template1 | 10 | 0 | C | C | t | t | -1 | 14146 | 1351 | 1663 | ORA | {=c/Ruby,Ruby=CTc/Ruby} template0 | 10 | 0 | C | C | t | f | -1 | 14146 | 1350 | 1663 | ORA | {=c/Ruby,Ruby=CTc/Ruby} gaussdb | 10 | 0 | C | C | f | t | -1 | 14146 | 1352 | 1663 | ORA | {=Tc/Ruby,Ruby=CTc/Ruby,chaojun=C/Ruby,hu obinru=C/Ruby} mydatabase | 17000 | 0 | C | C | f | t | -1 | 14146 | 1351 | 1663 | ORA | (4 rows) 使用管理员用户给普通用户赋予创建外部服务器的权限和使用外表的权限。 使用数据库管理员用户通过数据库客户端连接新建的数据库。 例如,使用gsql客户端的用户可以直接使用如下语句切换为管理员用户去连接新建的数据库: 1 \c mydatabase dbadmin; 根据提示输入用户密码。 注意,必须先使用管理员用户连接到将要创建外部服务器和使用外表的数据库,再对普通用户进行授权。 默认只有系统管理员才可以创建外部服务器,普通用户需要授权才可以创建,执行以下命令授权: 1 GRANT ALL ON FOREIGN DATA WRAPPER hdfs_fdw TO dbuser; 其中FOREIGN DATA WRAPPER的名字只能是hdfs_fdw,dbuser为创建SERVER的用户名。 执行以下命令赋予用户使用外表的权限: 1 ALTER USER dbuser USEFT; 查看用户: 1 2 3 4 5 6 7 8 9 10 11 12 13 SELECT r.rolname, r.rolsuper, r.rolinherit, r.rolcreaterole, r.rolcreatedb, r.rolcanlogin, r.rolconnlimit, r.rolvalidbegin, r.rolvaliduntil, ARRAY(SELECT b.rolname FROM pg_catalog.pg_auth_members m JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid) WHERE m.member = r.oid) as memberof , r.rolreplication , r.rolauditadmin , r.rolsystemadmin , r.roluseft FROM pg_catalog.pg_roles r ORDER BY 1; 返回结果中,dbuser的信息中包含了UseFT权限,表示授权成功: 1 2 3 4 5 rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolconnlimit | rolvalidbegin | rolvaliduntil | memberof | rolreplication | rolauditadmin | rolsystemadmin | roluseft -----------+----------+------------+---------------+-------------+-------------+--------------+---------------+---------------+----------+----------------+---------------+----------------+---------- dbuser | f | t | f | t | t | -1 | | | {} | f | f | f | t lily | f | t | f | f | t | -1 | | | {} | f | f | f | f Ruby | t | t | t | t | t | -1 | | | {} | t | t | t | t
  • 导入流程 图3 GDS并行导入流程 表1 流程说明 流程 说明 准备源数据。 准备需要导入数据库的源数据文件,并上传至数据服务器。 详细内容请参见准备源数据。 启动GDS。 在数据服务器上安装配置并启动GDS。 详细内容请参见安装配置和启动GDS。 创建外表。 创建外表用于识别数据源文件中的数据。外表中保存了数据源文件的位置、文件格式、存放位置、编码格式、数据间的分隔符等信息。 详细内容请参见创建GDS外表。 执行导入数据。 在创建好外表后,通过INSERT语句,将数据快速、高效地导入到目标表中。详细内容请参见执行导入数据。 处理错误表。 在数据并行导入发生错误时,请根据具体的错误信息进行处理,以保证导入数据的完整性。 详细内容请参见处理导入错误。 优化查询效率。 导入数据后,通过ANALYZE语句生成表统计信息。ANALYZE语句会将统计结果自动存储在系统表PG_STATISTIC中。执行计划生成器会使用这些统计数据,以生成最有效的查询执行计划。 停止GDS 待数据导入完成后,登录每台数据服务器,分别停止GDS。 GDS的停止请参见停止GDS。
  • 概述 并行导入将存储在服务器普通文件系统中的数据导入到GaussDB(DWS)数据库中。暂时不支持将存储在HDFS文件系统上的数据导入GaussDB(DWS)。 并行导入功能通过外表设置的导入策略、导入数据格式等信息来识别数据源文件,利用多DN并行的方式,将数据从数据源文件导入到数据库中,从而提高整体导入性能。如图1所示: CN只负责任务的规划及下发,把数据导入的工作交给了DN,释放了CN的资源,使其有能力处理其他外部请求。 所有DN都参与数据导入,这样可以充分利用各设备的计算能力及网络带宽,提升导入效率。 外表灵活的OPTION设置,有利于在数据入库前对数据做预处理,例如非法字符替换、容错处理等。 图1 数据并行导入示意图 上图中所涉及的相关概念说明如下: CN(Coordinator):GaussDB(DWS)协调节点。在导入场景下,接收到应用或客户端的导入SQL指令后,负责任务的规划及下发到DN。 DN(Datanode):GaussDB(DWS)数据节点。接收CN下发的导入任务,将数据源文件中的数据通过外表写入数据库目标表中。 数据源文件:存有数据的文件。文件中保存的是待导入数据库的数据。 数据服务器:数据源文件所在的服务器称为数据服务器。基于安全考虑,建议数据服务器和GaussDB(DWS)集群处于同一内网。 外表Foreign Table:用于识别数据源文件的位置、文件格式、存放位置、编码格式、数据间的分隔符等信息。是关联数据文件与数据库实表(目标表)的对象。 目标表:数据库中的实表。数据源文件中的数据最终导入到这些表中存储,包括行存表和列存表。
  • GDS并发导入 数据量大,数据存储在多个服务器上时,在每个数据服务器上安装配置、启动GDS后,各服务器上的数据可以并行入库。如图2所示。 图2 多数据服务器并行导入 GDS进程数目不能超过DN数目。如果超过,会出现一个DN连接多个GDS进程的情形,可能会导致部分GDS异常运行。 数据存储在一台数据服务器上时,如果GaussDB(DWS)及数据服务器上的I/O资源均还有可利用空间时,可以采用GDS多线程来支持并发导入。 GDS是根据导入事务并发数来决定服务运行线程数的,也就是说即使启动GDS时设置了多线程,也并不会加速单个导入事务。未做过人为事务处理时,一条INSERT语句就是一个导入事务。 综上,多线程的使用场景如下: 多表并发导入时,采用多线程充分利用资源及提升并发导入效率。 对数据量大的某一事实表的导入进行提速。 将该事实表对应的数据拆分为多个数据文件,通过多外表同时入库的方式实现多线程并发导入。注意需确保每个外表所能读取的数据文件不重复。
  • 示例 示例一:执行gs_dump,导出表hr.staffs的定义和数据,并对导出文件进行压缩,导出文件格式为文本格式。 gs_dump -W password -U jack -f /home//backup/MPPDB_table_backup.sql -p 8000 -h 10.10.10.100 human_resource -t hr.staffs -Z 6 -F p gs_dump[port=''][human_resource][2017-07-21 17:05:10]: dump database human_resource successfully gs_dump[port=''][human_resource][2017-07-21 17:05:10]: total time: 3116 ms 示例二:执行gs_dump,只导出表hr.staffs的数据,导出文件格式为tar归档格式。 gs_dump -W password -U jack -f /home//backup/MPPDB_table_data_backup.tar -p 8000 -h 10.10.10.100 human_resource -t hr.staffs -a -F t gs_dump[port=''][human_resource][2017-07-21 17:04:26]: dump database human_resource successfully gs_dump[port=''][human_resource][2017-07-21 17:04:26]: total time: 2570 ms 示例三:执行gs_dump,导出表hr.staffs的定义,导出文件格式为目录归档格式。 gs_dump -W password -U jack -f /home//backup/MPPDB_table_def_backup -p 8000 -h 10.10.10.100 human_resource -t hr.staffs -s -F d gs_dump[port=''][human_resource][2017-07-21 17:03:09]: dump database human_resource successfully gs_dump[port=''][human_resource][2017-07-21 17:03:09]: total time: 2297 ms 示例四:执行gs_dump,不导出表hr.staffs,导出文件格式为自定义归档格式。 gs_dump -W password -U jack -f /home//backup/MPPDB_table_backup4.dmp -p 8000 -h 10.10.10.100 human_resource -T hr.staffs -F c gs_dump[port=''][human_resource][2017-07-21 17:14:11]: dump database human_resource successfully gs_dump[port=''][human_resource][2017-07-21 17:14:11]: total time: 2450 ms 示例五:执行gs_dump,同时导出两个表hr.staffs和hr.employments,导出文件格式为文本格式。 gs_dump -W password -U jack -f /home//backup/MPPDB_table_backup1.sql -p 8000 -h 10.10.10.100 human_resource -t hr.staffs -t hr.employments -F p gs_dump[port=''][human_resource][2017-07-21 17:19:42]: dump database human_resource successfully gs_dump[port=''][human_resource][2017-07-21 17:19:42]: total time: 2414 ms 示例六:执行gs_dump,导出时,排除两个表hr.staffs和hr.employments,导出文件格式为文本格式。 gs_dump -W password -U jack -f /home//backup/MPPDB_table_backup2.sql -p 8000 -h 10.10.10.100 human_resource -T hr.staffs -T hr.employments -F p gs_dump[port=''][human_resource][2017-07-21 17:21:02]: dump database human_resource successfully gs_dump[port=''][human_resource][2017-07-21 17:21:02]: total time: 3165 ms 示例七:执行gs_dump,导出表hr.staffs的定义和数据,只导出表hr.employments的定义,导出文件格式为tar归档格式。 gs_dump -W password -U jack -f /home//backup/MPPDB_table_backup3.tar -p 8000 -h 10.10.10.100 human_resource -t hr.staffs -t hr.employments --exclude-table-data hr.employments -F t gs_dump[port=''][human_resource][2018-11-14 11:32:02]: dump database human_resource successfully gs_dump[port=''][human_resource][2018-11-14 11:32:02]: total time: 1645 ms 示例八:执行gs_dump,导出表hr.staffs的定义和数据,并对导出文件进行加密,导出文件格式为文本格式。 gs_dump -W password -U jack -f /home//backup/MPPDB_table_backup4.sql -p 8000 -h 10.10.10.100 human_resource -t hr.staffs --with-encryption AES128 --with-key 1212121212121212 -F p gs_dump[port=''][human_resource][2018-11-14 11:35:30]: dump database human_resource successfully gs_dump[port=''][human_resource][2018-11-14 11:35:30]: total time: 6708 ms 示例九:执行gs_dump,导出public模式下所有表(包括视图、序列和外表)和hr模式中staffs表,包含数据和表定义,导出文件格式为自定义归档格式。 gs_dump -W password -U jack -f /home//backup/MPPDB_table_backup5.dmp -p 8000 -h 10.10.10.100 human_resource -t public.* -t hr.staffs -F c gs_dump[port=''][human_resource][2018-12-13 09:40:24]: dump database human_resource successfully gs_dump[port=''][human_resource][2018-12-13 09:40:24]: total time: 896 ms 示例十: 执行gs_dump,仅导出依赖于t1模式下的test1表对象的视图信息,导出文件格式为目录归档格式。 gs_dump -W password -U jack -f /home//backup/MPPDB_view_backup6 -p 8000 -h 10.10.10.100 human_resource -t t1.test1 --include-depend-objs --exclude-self -F d gs_dump[port=''][jack][2018-11-14 17:21:18]: dump database human_resource successfully gs_dump[port=''][jack][2018-11-14 17:21:23]: total time: 4239 ms
  • Kafka实时入库到GaussDB(DWS) 通过 数据湖探索 服务 DLI Flink作业将Kafka的消费数据实时同步至GaussDB(DWS) 数据仓库 ,实现Kafka实时入库到GaussDB(DWS)的过程。 了解DLI请参见 数据湖 产品介绍 。 了解Kafka请参见分布式消息服务Kafka产品介绍。 图1 Kafka实时入库DWS 具体操作请参见通过DLI Flink作业将Kafka数据实时写入DWS。 父主题: 实时入库
  • 相关原理 下面分别从以下两类表介绍从集群导出数据到OBS的原理。 Hash分布表:在建表语句中指定了DISTRIBUTE BY HASH (Column_Name)的表。 对于Hash分布表而言,在存储表数据时,采用的是散列(Hash)方式的存储原理,如图1所示,图中以将表(T2)导出到OBS为例。 在存储表数据时,将表(T2)中指定的Hash字段(col2)进行Hash运算后,生成相应的Hash值(value),根据DN与Hash值的映射关系,将该元组分发到相应的DN上进行存储。 在导出数据到OBS时,每一个存储了导出表的(T2)数据的DN会直接向OBS导出属于自己的数据文件。多个节点将并行导出原始数据。 图1 Hash分布原理 Replication表:在建表语句中指定了DISTRIBUTE BY REPLICATION的表。 Replication表在GaussDB(DWS)集群的每个节点上都会存储一份完整的表数据。因此,在导出数据到OBS时,GaussDB(DWS)只会随机选择一个DN节点向OBS导出数据。
  • 导出文件的命名规则 GaussDB(DWS)向OBS导出数据的文件命名规则如下: 从DN节点导出数据时,以segment的格式存储在OBS服务中,文件命名规则为“表名称_节点名称_segment.n”。这里的“n”是从0开始按照自然数0、1、2、3递增。 例如,表t1在datanode3里面的数据导出成文件“t1_datanode3_segment.0”、“t1_datanode3_segment.1”等等,以此类推。 对于来自不同集群或不同数据库的数据,建议用户可以将数据导出到不同的OBS桶或者同一个OBS桶的不同路径下。 每个segment可以存储的最大数据为1GB,并且不能切断元组。如果segment超过1GB,超过1GB的数据会作为第二个segment进行存储。 例如: datanode3节点将表(t1)导出到OBS时,一个segment里面已经存储了100条元组,大小是1023MB,如果再插入一条5MB的元组,大小就变成1028MB了,此时会以1023MB生成一个“t1_datanode3_segment.0”保存到OBS服务中,新插入的第101条元组作为下一个“t1_datanode3_segment.1”保存到OBS服务中。 导出Hash分布表时,每个DataNode节点生成的segment数量和集群的DataNode节点数无关,而是取决于每个DataNode节点上存储的数据量。按照Hash方式存储在各个DataNode节点上的数据分布不一定均匀。 例如,一个有6个DataNode节点的集群,DataNode1到DataNode6分别有1.5GB、0.7GB、0.6GB、0.8GB、0.4GB、0.5GB的数据,则导出时会生成7个OBS segment文件,其中DataNode1会生成1GB和0.5GB两个segment文件。
  • 导出流程 图2 并行导出流程 表1 流程说明 流程 说明 子任务 规划导出数据 创建OBS桶,并在桶中创建导出后的数据文件的存放目录。 详细请参见规划导出数据。 - 创建OBS外表。 创建外表用于帮助OBS指定的待导出数据文件。外表中保存了数据源文件导出后的位置、文件格式、编码格式、数据间的分隔符等信息。 详细内容请参见创建OBS外表。 - 执行导出数据。 在创建好外表后,通过INSERT语句,将数据快速、高效地导出到数据文件中。 详细内容请参见执行导出。 -
  • 相关概念 数据源文件:存储有数据的TEXT、 CS V、ORC、PARQUET文件。 OBS: 对象存储服务 ,是一种可存储文档、图片、影音视频等非结构化数据的 云存储 服务。从GaussDB(DWS)并行导出数据时,数据对象放置在OBS服务器上。 桶(Bucket):对OBS中的一个存储空间的形象称呼,是存储对象的容器。 对象存储是一种非常扁平化的存储方式,桶中存储的对象都在同一个逻辑层级,去除了文件系统中的多层级树形目录结构。 在OBS中,桶名必须是全局唯一的且不能修改,即用户创建的桶不能与自己已创建的其他桶名称相同,也不能与其他用户创建的桶名称相同。每个桶在创建时都会生成默认的桶ACL(Access Control List),桶ACL列表的每项包含了对被授权用户授予什么样的权限,如读取权限、写入权限、完全控制权限等。用户只有对桶有相应的权限,才可以对桶进行操作,如创建、删除、显示、设置桶ACL等。 一个用户最多可创建100个桶,但每个桶中存放的总数据容量和对象/文件数量没有限制。 对象:是存储在OBS中的基本数据单位。用户上传的数据以对象的形式存储在OBS的桶中。对象的属性包括名称Key,Metadata,Data。 通常,将对象等同于文件来进行管理,但是由于OBS是一种对象存储服务,并没有文件系统中的文件和文件夹概念。为了使用户更方便进行管理数据,OBS提供了一种方式模拟文件夹。通过在对象的名称中增加“/”,如tpcds1000/stock.csv,tpcds1000可以等同于文件夹,stock.csv就可以等同于文件名,而对象名称(key)仍然是tpcds1000/stock.csv、对象的内容就是stock.csv数据文件的内容。 Key:对象的名称(键),为经过UTF-8编码的长度大于0且不超过1024的字符序列,一个桶里的每个对象必须拥有唯一的对象键值。用户可使用桶名+对象名来存储和获取对应的对象。 Metadata:对象元数据,用来描述对象的信息。元数据又可分为系统元数据和用户元数据。这些元数据以键值对(Key-value)的形式随http头域一起上传到OBS系统。 系统元数据由OBS系统产生,在处理对象数据时使用。系统元数据包括:Date、Content-length、last-modify、Content-MD5等。 用户元数据由用户上传对象时指定,是用户自己对对象的一些描述信息。 Data:对象的数据内容,OBS对于数据的内容是无感知的,即认为对象内的数据为无状态的二进制数据。 外表:用于识别数据源文件中的数据。外表中保存了数据源文件的位置、文件格式、存放位置、编码格式、数据间的分隔符等信息。
  • 示例 示例一:执行gs_dumpall,导出所有数据库的公共全局表空间信息和用户信息(dbadmin用户为管理员用户),导出文件为文本格式。 gs_dumpall -W password -U dbadmin -f /home/dbadmin/backup/MPPDB_globals.sql -p 8000 -h 10.10.10.100 -g gs_dumpall[port=''][2018-11-14 19:06:24]: dumpall operation successful gs_dumpall[port=''][2018-11-14 19:06:24]: total time: 1150 ms 示例二: 执行gs_dumpall,导出所有数据库的公共全局表空间信息(dbadmin用户为管理员用户),并对导出文件进行加密,导出文件为文本格式。 gs_dumpall -W password -U dbadmin -f /home/dbadmin/backup/MPPDB_tablespace.sql -p 8000 -h 10.10.10.100 -t --with-encryption AES128 --with-key 1212121212121212 gs_dumpall[port=''][2018-11-14 19:00:58]: dumpall operation successful gs_dumpall[port=''][2018-11-14 19:00:58]: total time: 186 ms 示例三:执行gs_dumpall,导出所有数据库的公共全局用户信息(dbadmin用户为管理员用户),导出文件为文本格式。 gs_dumpall -W password -U dbadmin -f /home/dbadmin/backup/MPPDB_user.sql -p 8000 -h 10.10.10.100 -r gs_dumpall[port=''][2018-11-14 19:03:18]: dumpall operation successful gs_dumpall[port=''][2018-11-14 19:03:18]: total time: 162 ms
  • 关于COPY FROM STDIN导入数据 这种方式适合数据写入量不太大, 并发度不太高的场景。 用户可以使用以下方式通过COPY FROM STDIN语句直接向GaussDB(DWS)写入数据。 通过键盘输入向GaussDB(DWS)写入数据。 通过JDBC驱动的CopyManager接口从文件或者数据库向GaussDB(DWS)写入数据。此方法支持COPY语法中copy option的所有参数。 父主题: 使用COPY FROM STDIN导入数据
  • 创建外表 当完成获取 MRS 数据源连接的外部服务器信息和获取MRS数据源的HDFS路径后,就可以创建一个外表,用于读取MRS数据源数据。 创建外表的语法格式如下,详细的描述请参见(CREATE FOREIGN TABLE (SQL on Hadoop or OBS))。 CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ { column_name type_name [ { [CONSTRAINT constraint_name] NULL | [CONSTRAINT constraint_name] NOT NULL | column_constraint [...]} ] | table_constraint [, ...]} [, ...] ] ) SERVER dfs_server OPTIONS ( { option_name ' value ' } [, ...] ) DISTRIBUTE BY {ROUNDROBIN | REPLICATION} [ PARTITION BY ( column_name ) [ AUTOMAPPED ] ] ; 例如,创建一个名为"foreign_product_info"的外表,对语法中的参数按如下描述进行设置: table_name 必选。外表的表名。 表字段定义 column_name:外表中的字段名。 type_name:字段的数据类型。 多个字段用“,”隔开。 外表的字段个数和字段类型,需要与MRS上保存的数据完全一致。定义字段的数据类型之前,您必须先了解数据类型转换说明。 SERVER dfs_server 外表的外部服务器名称,这个server必须存在。外表通过设置外部服务器,从而关联MRS数据源连接并从MRS集群读取数据。 此处应填写为通过获取MRS数据源连接的外部服务器信息查询到的“srvname”字段的值。 OPTIONS参数 用于指定外表数据的各类参数,关键参数如下所示。 format:必选参数。取值只支持“orc”。表示数据源文件的格式,只支持Hive的ORC数据文件。 foldername:必选参数。表示数据在HDFS的存储目录或数据文件路径。 如果是启用了Kerberos认证的MRS分析集群,请确保MRS数据源连接的MRS用户,拥有此目录的读取权限。 请按照获取MRS数据源的HDFS路径中的步骤获取HDFS路径,该路径作为foldername的参数值。 encoding:可选参数。外表中数据源文件的编码格式名称,缺省为utf8。 DISTRIBUTE BY 表示外表的数据读取方式。有以下两种方式供选择,在本例中选择ROUNDROBIN。 ROUNDROBIN:表示外表在从数据源读取数据时,GaussDB(DWS)集群每一个节点读取随机一部分数据,并组成完整数据。 REPLICATION:表示外表在从数据源读取数据时,GaussDB(DWS)集群每一个节点都读取一份完整数据。 语法中的其他参数 其他参数均为可选参数,用户可以根据自己的需求进行设置,在本例中不需要设置。 根据以上信息,创建外表命令如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 DROP FOREIGN TABLE IF EXISTS foreign_product_info; CREATE FOREIGN TABLE foreign_product_info ( product_price integer , product_id char(30) , product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) SERVER hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca OPTIONS ( format 'orc', encoding 'utf8', foldername '/user/hive/warehouse/demo.db/product_info_orc/' ) DISTRIBUTE BY ROUNDROBIN;
  • 数据类型转换说明 当前用户导入到Hive/Spark的数据在HDFS存储为ORC文件格式,GaussDB(DWS)实际读取HDFS中的ORC文件,并对文件内的数据进行查询分析。 由于Hive/Spark支持的数据类型与GaussDB(DWS)自身支持的数据类型存在差异,在创建外表定义表字段时,您需要了解这两者之间数据类型的对应关系,具体如表1所示: 表1 数据类型匹配表 类型名称 GaussDB(DWS)的HDFS/OBS外表支持的字段类型 Hive表字段类型 Spark表字段类型 2字节整数 SMALLINT SMALLINT SMALLINT 4字节整数 INTEGER INT INT 8字节整数 BIGINT BIGINT BIGINT 单精度浮点数 FLOAT4 (REAL) FLOAT FLOAT 双精度浮点型 FLOAT8(DOUBLE PRECISION) DOUBLE FLOAT 科学数据类型 DECIMAL[p (,s)] 最大支持38位精度 DECIMAL 最大支持38位(Hive 0.11) DECIMAL 日期类型 DATE DATE DATE 时间类型 TIMESTAMP TIMESTAMP TIMESTAMP Boolean类型 BOOLEAN BOOLEAN BOOLEAN Char类型 CHAR(n) CHAR (n) STRING VarChar类型 VARCHAR(n) VARCHAR (n) VARCHAR (n) 字符串 TEXT(CLOB) STRING STRING
  • 获取MRS数据源连接的外部服务器信息 使用创建外部服务器的用户去连接其对应的数据库。 是否使用普通用户在自定义数据库中创建外表,请根据需求进行选择: 是 请先确保,您已按照手动创建外部服务器章节中的步骤,创建了普通用户dbuser和它的数据库mydatabase,并在mydatabase中手动创建了一个外部服务器。 使用用户dbuser通过GaussDB(DWS)提供的数据库客户端连接数据库mydatabase。 如果已经使用gsql客户端连接至数据库,可以直接执行如下命令进行用户和数据库切换: 1 \c mydatabase dbuser; 根据界面提示输入密码。 否 当您通过GaussDB(DWS)管理控制台创建MRS数据源连接时,数据库管理员dbadmin会在默认数据库postgres中自动创建一个外部服务器。因此,如果使用数据库管理员dbadmin在默认数据库postgres中创建外表,需要通过GaussDB(DWS)提供的数据库客户端工具连接数据库。例如,使用gsql客户端的用户通过如下命令连接数据库: 1 gsql -d postgres -h 192.168.2.30 -U dbadmin -p 8000 -W password -r 执行以下命令,查看已创建的MRS数据源连接的外部服务器信息。 1 SELECT * FROM pg_foreign_server; 也可以执行\desc+命令查看外部服务器信息。 返回结果如下: 1 2 3 4 5 srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions --------------------------------------------------+----------+--------+---------+------------+--------+--------------------------------------------------------------------------------------------------------------------- gsmpp_server | 10 | 13673 | | | | hdfs_server_8f79ada0_d998_4026_9020_80d6de2692ca | 16476 | 13685 | | | | {"address=192.168.1.245:25000,192.168.1.218:25000",hdfscfgpath=/MRS/8f79ada0-d998-4026-9020-80d6de2692ca,type=hdfs} (2 rows) 查询结果中,每一行代表一个外部服务器的信息。与MRS数据源连接相关联的外部服务器包含以下信息: srvname值包含“hdfs_server”字样以及MRS集群的ID,此ID与MRS管理控制台的集群列表MRS ID相同。 srvoptions字段中的address参数为MRS集群的主备节点的IP地址及端口。 您可以根据上述信息找到您所要的外部服务器,并记录下它的srvname和srvoptions的值。
  • 操作步骤 以gds_user用户登录安装GDS的数据服务器。 请根据启动GDS的方式,选择停止GDS的方式。 若用户使用“gds”命令启动GDS,请使用以下方式停止GDS。 执行如下命令,查询GDS进程号。 ps -ef|grep gds 示例:其中GDS进程号为128954。 ps -ef|grep gds gds_user 128954 1 0 15:03 ? 00:00:00 gds -d /input_data/ -p 192.168.0.90:5000 -l /log/gds_log.txt -D gds_user 129003 118723 0 15:04 pts/0 00:00:00 grep gds 使用“kill”命令,停止GDS。其中128954为上一步骤中查询出的GDS进程号。 kill -9 128954 若用户使用“gds_ctl.py”命令启动GDS,请使用以下命令停止GDS。 cd /opt/bin/dws/gds/bin python3 gds_ctl.py stop
  • 导入数据概述 LakeFormation是企业级数据湖一站式构建服务,提供数据湖元数据统一管理的可视化界面及API,兼容Hive元数据模型以及Ranger权限模型,支持对接 MapReduce服务 (MRS)、数据仓库服务 GaussDB(DWS)等多种计算引擎及大数据云服务,使客户便捷高效地构建数据湖和运营相关业务,加速释放业务数据价值。 用户可以将海量业务数据,存储在MRS的分析集群,即使用Hive/Spark组件保存,Hive/Spark的数据文件则保存在OBS中。然后使用GaussDB(DWS)通过LakeFormation服务来读取MRS集群上的数据。 GaussDB(DWS)支持在相同网络中,配置一个GaussDB(DWS)集群连接到一个LakeFormation实例,通过Lakeformation获取表的元数据以及权限信息,然后将数据从OBS中的文件读取到GaussDB(DWS)。 父主题: 使用LakeFormation数据源导入数据
  • 执行数据导入 创建本地目标表。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 DROP TABLE IF EXISTS product_info; CREATE TABLE product_info ( product_price integer , product_id char(30) , product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) ; 从Hive表导入目标表。 1 INSERT INTO product_info SELECT * FROM ex1.product_info_orc; 查询导入结果。 1 SELECT * FROM product_info;
  • 执行数据导出 创建本地源表。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 DROP TABLE IF EXISTS product_info_export; CREATE TABLE product_info_export ( product_price integer , product_id char(30) , product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) ; INSERT INTO product_info_export SELECT * FROM product_info; Hive端创建目标表。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 DROP TABLE product_info_orc_export; CREATE TABLE product_info_orc_export ( product_price int , product_id char(30) , product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt int , product_comment_time date , product_comment_num int , product_comment_content varchar(200) ) row format delimited fields terminated by ',' stored as orc; 从本地源表导入Hive表。 1 INSERT INTO ex1.product_info_orc_export SELECT * FROM product_info_export; Hive端查询导入结果 1 SELECT * FROM product_info_orc_export;
  • 约束与限制 目前仅支持对接EXTERNAL SCHEMA对应的Hive端数据库的表进行SELECT、INSERT和INSERT OVERWRITE操作,其余操作均不支持。 MRS端两种数据源对应格式支持的操作参见表1。 表1 MRS端数据源支持的操作 数据源 表类型 操作 TEXT CSV PARQUET ORC HDFS 非分区表 SELECT √ √ √ √ INSERT/INSERT OVERWRITE x x √ √ 分区表 SELECT √ √ √ √ INSERT/INSERT OVERWRITE x x √ √ OBS 非分区表 SELECT √ √ √ √ INSERT/INSERT OVERWRITE x x √ √ 分区表 SELECT x x √ √ INSERT/INSERT OVERWRITE x x √ √ 不再保证事务原子性,事务失败后,不再保证数据一致性;不支持回滚。 不支持通过EXTERNAL SCHEMA对hive端创建的表进行GRANT和REVOKE操作。 并发支持:DWS、HIVE、SPARK并发读写,会出现脏读问题;对同一张非分区表或者同一张分区表的同一个分区执行包含INSERT OVERWRITE相关的并发操作无法保证预期结果,请不要执行此类操作。 Hive Metastore特性不支持联邦机制。
  • 创建外部服务器 仅Hive对接OBS场景执行,Hive对接HDFS场景跳过。 使用Data Studio连接已创建好的DWS集群。 执行以下语句,创建外部服务器。 认证用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 1 2 3 4 5 6 7 8 9 CREATE SERVER obs_server FOREIGN DATA WRAPPER DFS_FDW OPTIONS ( address 'obs.example.com:5443', //OBS的访问地址。 encrypt 'on', access_key '{AK值}', secret_access_key '{SK值}', type 'obs' ); 查看外部服务器。 1 SELECT * FROM pg_foreign_server WHERE srvname='obs_server'; 返回结果如下所示,表示已经创建成功: 1 2 3 4 srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions --------------------------------------------------+----------+--------+---------+------------+--------+--------------------------------------------------------------------------------------------------------------------- obs_server | 16476 | 14337 | | | | {address=obs.example.com:5443,type=obs,encrypt=on,access_key=***,secret_access_key=***} (1 row)
  • 创建MRS数据源连接 登录DWS管理控制台,单击已创建好的DWS集群,确保DWS集群与MRS在同一个区域、可用分区,并且在同一VPC子网下。 切换到“MRS数据源”,单击“创建MRS数据源连接”。 配置以下参数,单击“确认”。 数据源名称:mrs_server 配置方式:MRS用户 MRS数据源:选择前面创建的mrs_01集群。 MRS用户:admin 用户密码:前面创建MRS数据源的admin密码。
  • 创建External Schema 创建EXTERNAL SCHEMA。 SERVER名字填写创建的LakeFormation数据源名称,DATABASE填写要访问的LakeFormation的数据库,source填写内容为lakeformation,catalog填写为要访问的LakeFormation的catalog 1 2 3 4 5 6 DROP SCHEMA IF EXISTS ex1; CREATE EXTERNAL SCHEMA ex1 WITH SOURCE lakeformation DATABASE 'default' SERVER lf_server catalog 'hive';
  • 执行数据导入 创建本地目标表。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 DROP TABLE IF EXISTS product_info; CREATE TABLE product_info ( _hoodie_commit_time text, _hoodie_commit_seqno text, _hoodie_record_key text, _hoodie_partition_path text, _hoodie_file_name text, product_price integer , product_id char(30) , product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) ; 从Hive表导入目标表。 1 INSERT INTO product_info SELECT * FROM ex1.product_info_orc; 查询导入结果。 1 SELECT * FROM product_info;
  • 相关操作 在数据源列表“策略配置”列单击,跳转到加密队列配置页面。建议在配置加密队列前进行敏感数据识别,具体操作,请参见扫描资产的敏感数据。 在数据源列表“策略配置”列单击,跳转到脱敏规则配置页面。建议在配置脱敏规则前进行敏感数据识别,具体操作,请参见扫描资产的敏感数据。 在数据源列表“操作”列单击“编辑”,修改数据资产信息。 在数据源列表“操作”列单击“删除”,删除不再需要的数据资产。 如果提示当前数据库未回滚表结构,请根据实际情况,回滚表结构或者配置解密队列。
  • 使用约束 表1 数据库加密支持纳管的数据源及版本 数据库 版本号 MySQL 5.5 、5.6、5.7、8.0、8.0.13+ Oracle 11.1、11.2、12c、19c SQLServer 2012、2016 PostgreSQL 9.4、 11.5 DM 6、7.6、8.1 Kingbase V8 R3、V8 R6 MariaDB 10.2 GaussDB A TDSQL 5.7 TBASE V2.15.17.3 RDS_MYSQL 5.6、5.7、8.0 RDS_PostgreSQL 11 表2 数据库加密的数据库账号权限 数据库 需要select权限的系统表名 数据库账号权限 MySQL mysql.user performance_schema.* select insert create update delete drop alter index RDS_MYSQL mysql.user performance_schema.* select insert create update delete drop alter index TDSQL mysql.user performance_schema.* select insert create update delete drop alter index MariaDB mysql.user performance_schema.* select insert create update delete drop alter index DM SYS.ALL_SUBPART_KEY_COLUMNS SYS.ALL_USERS SYS.ALL_CONS_COLUMNS SYS.ALL_CONSTRAINTS SYS.ALL_TABLES SYS.ALL_TABLE_COLUMNS SYS.ALL_COL_COMMENTS SYS.ALL_PART_KEY_COLUMNS SYS.ALL_IND_COLUMNS SYS.ALL_INDEXS V$VERSION V$LOCK SYS.DBMS_LOB SYS.DBMS_METADATA 用户角色必须是dba postgreSQL pg_catalog.pg_class pg_catalog.pg_index pg_catalog.pg_user pg_catalog.pg_indexes information_schema.columns information_schema.sequences information_schema.tables pg_catalog.pg_sequence 用户必须是表的owner或者是dba RDS_PostgreSQL pg_catalog.pg_class pg_catalog.pg_index pg_catalog.pg_user pg_catalog.pg_indexes information_schema.columns information_schema.sequences information_schema.tables pg_catalog.pg_sequence 用户必须是表的owner或者是dba TBASE pg_catalog.pg_class pg_catalog.pg_index pg_catalog.pg_user pg_catalog.pg_indexes information_schema.columns information_schema.sequences information_schema.tables pg_catalog.pg_sequence 用户必须是表的owner或者是dba GAUSSDB pg_catalog.pg_class pg_catalog.pg_index pg_catalog.pg_user pg_catalog.pg_indexes information_schema.columns information_schema.sequences information_schema.tables pg_catalog.pg_sequence 用户必须是表的owner或者是dba KINGBASE 8.6(pg模式) pg_catalog.pg_class pg_catalog.pg_index pg_catalog.pg_user pg_catalog.pg_indexes information_schema.columns information_schema.sequences information_schema.tables pg_catalog.pg_sequence pg_catalog.pg_matviews 用户必须是表的owner或者是dba KINGBASE 8.3 sys_catalog.sys_class sys_catalog.sys_index sys_catalog.sys_user sys_catalog.sys_indexes information_schema.columns information_schema.sequences information_schema.tables sys_catalog.sys_sequence sys_catalog.sys_matviews 用户必须是表的owner或者是dba Oracle SYS.ALL_SUBPART_KEY_COLUMNS SYS.DUAL SYS.ALL_USERS SYS.ALL_CONS_COLUMNS SYS.ALL_CONSTRAINTS SYS.ALL_TABLES SYS.ALL_TABLE_COLUMNS SYS.ALL_COL_COMMENTS SYS.ALL_PART_KEY_COLUMNS SYS.ALL_IND_COLUMNS SYS.ALL_INDEXS SYS.V_$INSTANCE SYS.DBMS_LOB SYS.DBMS_METADATA DBA_TABLES DBA_TAB_COLS 用户角色必须是dba SQLserver sys.tables sys.indexes sys.index_columns sys.default_constraints sys.systypes sys.extended_properties sys.foreign_key_columns sys.check_constraints sys.foreign_keys sys.columns sys.objects sys.all_columns sys.types sys.syslogins sys.all_objects sys.schemas sys.key_constraints sys.computed_columns sys.triggers sys.partition_schemes sys.dm_sql_referencing_entities schemaSelect schemaInsert schemaUpdate schemaAlter createTable VIEW SERVER STATE 加密表的select 加密表的insert 加密表的alter
  • 云模式-ELB接入排查思路和处理建议 防护网站的“部署模式”为“云模式-ELB接入”时,请参考图3和表3进行排查处理。 图3 云模式-ELB接入排查思路 表3 云模式-ELB接入WAF失败问题处理 可能原因 处理建议 原因一: 域名 /IP“接入状态”未刷新 在防护网站“接入状态”栏,单击刷新状态。 原因二:访问流量未达到WAF统计要求 须知: 防护网站接入WAF后,当WAF统计防护网站在5分钟内有20次请求时,将认定该防护网站已接入WAF。 在1分钟内多次访问防护网站。 在防护网站“接入状态”栏,单击刷新状态。 原因三:域名/IP参数配置错误 查看域名基本信息,检查域名/IP参数是否正确。 如果域名/IP配置错误,删除该域名/IP后重新添加防护网站。
  • 独享模式排查思路和处理建议 防护网站的“部署模式”为“独享模式”时,请参考图2和表2进行排查处理。 图2 独享模式排查思路 表2 独享模式接入WAF失败问题处理 可能原因 处理建议 原因一:域名/IP“接入状态”未刷新 在防护网站“接入状态”栏,单击刷新状态。 原因二:访问流量未达到WAF统计要求 须知: 防护网站接入WAF后,当WAF统计防护网站在5分钟内有20次请求时,将认定该防护网站已接入WAF。 在1分钟内多次访问防护网站。 在防护网站“接入状态”栏,单击刷新状态。 原因三:域名/IP参数配置错误 查看域名基本信息,检查域名/IP参数是否正确。 如果域名/IP配置错误,删除该域名/IP后重新添加防护网站。 原因四:没有为独享模式实例配置负载均衡,配置的负载均衡未绑定弹性公网IP 为独享引擎实例配置负载均衡。 为弹性负载均衡绑定弹性公网IP。 原因五:独享模式实例负载均衡配置错误或负载均衡绑定弹性公网IP错误 配置负载均衡后,当WAF独享引擎实例的“健康检查结果”为“正常”时,说明弹性负载均衡配置成功。健康检查异常的排查思路请参见健康检查异常。 为弹性负载均衡绑定弹性公网IP后,可以查看绑定的弹性公网IP,说明绑定成功。
  • 常见问题 可以只使用SFS Turbo HPC型文件系统支撑AI训练吗? 当数据规模较小,不存在冷热数据分级降本诉求,又希望能方便快捷的构建AI训练系统时,可以选择只使用SFS Turbo高性能文件存储支撑AI训练。 可以基于OBS对象存储支撑AI自动驾驶、大模型训练吗? OBS为容量型存储,在时延、带宽等存储性能上无法满足高性能AI训练,建议使用SFS Turbo HPC型高性能文件系统加速AI训练任务,训练速度加快可以节省AI算力费用。 文件系统使用空间不足,可以扩容吗? SFS Turbo文件系统支持在线扩容,扩容过程中挂载文件系统可能失败,建议业务低峰期扩容。 父主题: 面向AI场景使用OBS+SFS Turbo的存储加速实践
  • SFS Turbo容量及性能扩容 当SFS Turbo存储空间不足时,您可以对SFS Turbo存储空间进行容量扩容。 SFS Turbo HPC型是按每TB单位容量来提供一定的带宽吞吐,因此当SFS Turbo HPC性能不足时,需要通过容量扩容来提高性能吞吐。 登录SFS管理控制台,在左侧导航窗格中选择“SFS Turbo”。 在文件系统列表中,单击要扩容的文件系统所在行的“容量调整”或“扩容”,弹出对话框。 图1 SFS Turbo HPC型容量调整 根据业务需要,在“新容量”文本框中重新设置文件文系统的容量。 在弹出对话框中确认容量调整信息后,单击“是”。 在文件系统列表中查看文件系统调整后的容量信息。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全