云服务器内容精选

  • 文件型数据标注状态 数据标注状态分为“未标注”和“已标注”。 未标注:仅导入标注对象(指待标注的图片、文本等),不导入标注内容(指标注结果信息)。 已标注:同时导入标注对象和标注内容,当前“自由格式”的数据集不支持导入标注内容。 为了确保能够正确读取标注内容,要求用户严格按照规范存放数据: 导入方式选择目录时,需要用户选择“标注格式”,并按照标注格式的要求存放数据,详细规范请参见标注格式章节。 导入方式选择manifest时,需要满足manifest文件的规范。 数据标注状态选择“已标注”,您需要保证目录或manifest文件满足相应的格式规范,否则可能存在导入失败的情况。 导入已标注的文件,导入完成后,请检查您导入的数据是否为已标注状态。
  • 表格数据集从OBS导入操作 ModelArts支持从OBS导入表格数据,即csv文件。 表格数据集导入说明: 导入成功的前提是,数据源的schema需要与创建数据集指定的schema保持一致。其中schema指表格的列名和类型,创建数据集时一旦指定,不支持修改。 从OBS导入csv文件,不会校验数据类型,但是列数需要跟数据集的schema保持一致。如果数据格式不合法,会将数据置为null,详见表3。 导入的csv文件要求如下:需要选择文件所在目录,其中csv文件的列数需要跟数据集schema一致。支持自动获取csv文件的schema。 ├─dataset-import-example │ table_import_1.csv │ table_import_2.csv │ table_import_3.csv │ table_import_4.csv
  • 前提条件 为方便操作,建议采用Linux操作系统的机器部署Logstash。 Logstash的下载路径为:https://www.elastic.co/cn/downloads/logstash-oss Logstash要求使用OSS版本,选择和 CSS 一致版本。 安装完Logstash后,再根据如下步骤导入数据。安装Logstash的操作指导,请参见:https://www.elastic.co/guide/en/logstash/current/installing-logstash.html 安装Logstash之前,需要先安装JDK。在Linux操作系统中,您可以执行yum -y install java-1.8.0命令直接安装1.8.0版本JDK。在Windows操作系统中,您可以访问JDK官网,下载符合操作系统版本的JDK,并根据指导安装。 在“Logstash部署在弹性云服务器上时导入数据”场景中,请确保此弹性云服务器与接入的Elasticsearch集群在同一个VPC下。
  • 操作步骤 假设远端集群的待同步表名称是tbl_remote,用于数据同步的用户是user_remote,该用户须对表tbl_remote有访问权限;假设本地集群的待同步表名称是tbl_local。 创建server。 CREATE SERVER server_remote FOREIGN DATA WRAPPER GC_FDW OPTIONS( address '192.168.178.207:8000', dbname 'db_remote', username 'user_remote', password 'xxxxxxxx', syncsrv 'gsfs://192.168.178.129:5000|gsfs://192.168.178.129:5000' ); server_remote为server名称,供互联互通外表使用。 address为远端集群CN的IP地址和端口,仅允许填写一个地址。 dbname为远端集群的数据库名。 username为连接远端集群使用的用户名,注意该用户不能为系统管理员。 password为连接远端集群使用的用户名的密码。 syncsrv为GDS Server的IP地址和端口,如果有多个地址使用|分割,与GDS外表的location类似。 GaussDB (DWS)会对syncsrv所设置的GDS地址进行网络连接测试: 只能判断本地执行集群与GDS的网络情况,无法判断远端集群与GDS的网络情况,需要注意报错提示。 在移除不可用GDS后,从中选择不会导致业务hang的、数目适当的GDS进行数据同步。 创建互联互通外表。 CREATE FOREIGN TABLE ft_tbl( col_1 type_name, col_2 type_name, … ) SERVER server_remote OPTIONS ( schema_name 'schema_remote', table_name 'tbl_remote', encoding 'utf8' ); schema_name为远端集群表所属schema,如果该option缺省,则schema_name预设为该外表所在的schema。 table_name为远端集群表名,如果该option缺省,则table_name预设为该外表的表名。 encoding为远端集群的编码,如果该option缺省,则编码使用本地集群数据库的默认编码。 选项schema_name、table_name大小写敏感,必须与远端schema、table的名字大小写保持一致。 互联互通外表的列不允许带任何约束。 互联互通外表的列名、列类型必须与远端集群的表tbl_remote的列名和列类型完全一致。 SERVER须设置为步骤1中新建的server,必须包含syncsrv属性。 使用互联互通外表进行数据同步。 本地集群是目标集群时,发起数据同步业务: 全列全量数据同步: 1 INSERT INTO tbl_local SELECT * FROM ft_tbl; 全列过滤条件数据同步: 1 INSERT INTO tbl_local SELECT * FROM ft_tbl WHERE col_2 = XX; 部分列全量数据同步: 1 INSERT INTO tbl_local (col_1) SELECT col_1 FROM ft_tbl; 部分列过滤条件数据同步: 1 INSERT INTO tbl_local (col_1) SELECT col_1 FROM ft_tbl WHERE col_2 = XX; 本地集群是源集群时,发起数据同步业务: 单表数据同步: 1 INSERT INTO ft_tbl SELECT * FROM tbl_local; join结果集数据同步: 1 INSERT INTO ft_tbl SELECT * FROM tbl_local1 join tbl_local2 ON XXX; 如遇到报错连接失败,请检查server的信息确认两个集群是否已经相互连通。 如遇到报错GDS连接失败,请检查syncsrv指定的GDS Server是否都已经启动,且与两个集群所有节点可以网络连通。 如遇到报错表不存在,请检查外表的option信息是否正确。 如遇到报错列不存在,请检查外表的列名是否与源表一致。 如遇到报错列重复定义,请检查是否相应列名超长,若超长建议使用AS别名精简。 如遇到报错无法解析列类型,请检查语句中是否有列上表达式。 如遇到报错列信息不匹配,请检查外表的列信息是否与远端集群对应表的列信息是否一致。 如遇到报错语法不支持,请检查是否使用了Join、distinct、排序等复杂用法。 如遇到乱码,请检查两端数据库的实际编码是否一致。 当本地集群是源集群时,存在极小的概率出现数据成功同步到远端集群,但是本地集群返回执行失败的情况,针对这种情况建议校验同步数据记录数。 当本地集群是源集群时,通过事务块、子事务等控制的数据同步,需要总事务提交后才能查询到数据同步结果。 删除互联互通外表。 DROP FOREIGN TABLE ft_tbl;
  • 使用前准备 配置两个集群互连。 规划部署GDS服务器,确保所有的GDS服务器可以和上面配置的两个集群所有节点网络连通,即GDS服务器的安全组入方向要放通对应的GDS端口(例如5000)和DWS端口(默认8000)。部署GDS请参考安装配置和启动GDS。 启动GDS时,可指定任意目录作为数据中转的目录,例如/opt,启动命令示例如下: /opt/gds/bin/gds -d /opt -p 192.168.0.2:5000 -H 192.168.0.1/24 -l /opt/gds/bin/gds_log.txt -D -t 2
  • 使用场景 将数据从一个集群同步到另外一个集群,支持全量数据同步、过滤条件数据同步。 目前互联互通仅支持以下使用方式,除以下语句外,其他类型的语法均不支持。 INSERT INTO 内表 SELECT ... FROM 互联互通外表1 [WHERE]; INSERT INTO 互联互通表 SELECT * FROM 内表1 [JOIN 内表2 | WHERE]; SELECT ... FROM 互联互通表;
  • 注意事项 创建的互联互通外表与其对应的远端表的列名和类型名要完全一致,且远端表的类型为行存表或列存表。 执行同步语句时,要确保本地集群、远端集群的待同步表已存在。 使用期间,两个集群的状态应为Normal。 两个集群都需要具备基于GDS的跨集群互联互通功能。 建议两端集群的数据库编码保持一致,否则可能出现报错或者收到的数据为乱码。 两端集群所指定的数据库兼容类型要保持一致,否则可能报错或乱码。 确保执行数据同步的相关用户对待同步表有相应的访问权限。 互联互通外表只能用于跨集群数据同步场景,其他场景可能出错或无效。 互联互通外表不支持复杂的列上表达式,不支持复杂语法,包括join、排序、游标、with、集合等。 不下推的SQL语句无法使用本特性进行数据同步,否则会报错。 不支持EXPLAIN计划、逻辑集群。 不支持除了simple模式以外的JDBC模式。 当本地集群同步数据到远端集群时,只支持内表查询。 Foreign Server的syncsrv选项指定的GDS不支持SSL模式。 数据同步结束时只校验数据行数,不校验数据内容。 业务最大并发数不能大于GDS启动参数-t的一半,同时也不能大于max_active_statements,否则可能会导致业务超时失败。
  • 步骤5:分析和处理错误表中的错误信息 对数据导入过程中出现的数据格式错误信息进行处理,若没有错误信息,此步骤可跳过。 查询错误信息。 1 openGauss=# SELECT * FROM product_info_err ; 处理错误表中的错误信息。 按照本教程的示例操作,错误表中应该无错误信息。 您也可以将步骤2:在数据服务器上安装配置和启动GDS一节所建外表中的FILL_MISSING_FIELDS和IGNORE_EXTRA_DATA改为 'false'后,重新进行数据导入并查询错误表。此时,您将看到因如下原因带来的数据格式错误信息记录: 源数据文件product_info2.csv中第2条记录的最后一个字段“product_comment_content”缺失。 源数据文件product_info2.csv中第3条记录比外表定义列数多。 更多关于错误表及错误信息的处理请参见处理错误表。 父主题: 教程:使用GDS从远端服务器导入数据
  • 示例1:通过本地文件导入导出数据 在使用JAVA语言基于GaussDB进行二次开发时,可以使用CopyManager接口,通过流方式,将数据库中的数据导出到本地文件或者将本地文件导入数据库中,文件格式支持 CS V、TEXT等格式。 样例程序如下,执行时需要加载GaussDB的JDBC驱动。 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 import java.sql.Connection; import java.sql.DriverManager; import java.io.IOException; import java.io.FileInputStream; import java.io.FileOutputStream; import java.sql.SQLException; import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection; public class Copy{ public static void main(String[] args) { String urls = new String("jdbc:postgresql://localhost:8000/postgres"); //数据库URL String username = new String("username"); //用户名 String password = new String("passwd"); //密码 String tablename = new String("migration_table"); //定义表信息 String tablename1 = new String("migration_table_1"); //定义表信息 String driver = "org.postgresql.Driver"; Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(urls, username, password); } catch (ClassNotFoundException e) { e.printStackTrace(System.out); } catch (SQLException e) { e.printStackTrace(System.out); } // 将表migration_table中数据导出到本地文件d:/data.txt try { copyToFile(conn, "d:/data.txt", "(SELECT * FROM migration_table)"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //将d:/data.txt中的数据导入到migration_table_1中。 try { copyFromFile(conn, "d:/data.txt", tablename1); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 将表migration_table_1中的数据导出到本地文件d:/data1.txt try { copyToFile(conn, "d:/data1.txt", tablename1); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void copyFromFile(Connection connection, String filePath, String tableName) throws SQLException, IOException { FileInputStream fileInputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection)connection); fileInputStream = new FileInputStream(filePath); copyManager.copyIn("COPY " + tableName + " FROM STDIN with (" + "DELIMITER"+"'"+ delimiter + "'" + "ENCODING " + "'" + encoding + "')", fileInputStream); } finally { if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void copyToFile(Connection connection, String filePath, String tableOrQuery) throws SQLException, IOException { FileOutputStream fileOutputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection)connection); fileOutputStream = new FileOutputStream(filePath); copyManager.copyOut("COPY " + tableOrQuery + " TO STDOUT", fileOutputStream); } finally { if (fileOutputStream != null) { try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } } 父主题: 使用COPY FROM STDIN导入数据
  • \copy命令 \copy命令格式以及说明参见表 1 \copy元命令说明。 表1 \copy元命令说明 语法 说明 \copy { table [ ( column_list ) ] | ( query ) } { from | to } { filename | stdin | stdout | pstdin | pstdout } [ with ] [ binary ] [ oids ] [ delimiter [ as ] 'character' ] [ null [ as ] 'string' ] [ csv [ header ] [ quote [ as ] 'character' ] [ escape [ as ] 'character' ] [ force quote column_list | * ] [ force not null column_list ] ] 在任何gsql客户端登录数据库成功后,可以使用该命令进行数据的导入/导出。但是与SQL的COPY命令不同,该命令读取/写入的文件是本地文件,而非数据库服务器端文件;所以,要操作的文件的可访问性、权限等,都是受限于本地用户的权限。 说明: \COPY只适合小批量、格式良好的数据导入,不会对非法字符做预处理,也无容错能力,无法适用于含有异常数据的场景。导入数据应优先选择GDS或COPY。
  • 步骤5:分析和处理错误表中的错误信息 对数据导入过程中出现的数据格式错误信息进行处理,若没有错误信息,此步骤可跳过。 查询错误信息。 1 postgres=# SELECT * FROM product_info_err ; 处理错误表中的错误信息。 按照本教程的示例操作,错误表中应该无错误信息。 您也可以将步骤2:在数据服务器上安装配置和启动GDS一节所建外表中的FILL_MISSING_FIELDS和IGNORE_EXTRA_DATA改为 'false'后,重新进行数据导入并查询错误表。此时,您将看到因如下原因带来的数据格式错误信息记录: 源数据文件product_info2.csv中第2条记录的最后一个字段“product_comment_content”缺失。 源数据文件product_info2.csv中第3条记录比外表定义列数多。 更多关于错误表及错误信息的处理请参见处理错误表。 父主题: 教程:使用GDS从远端服务器导入数据
  • 示例2:从MySQL向GaussDB进行数据迁移 下面示例演示如何通过CopyManager从MySQL向GaussDB进行数据迁移的过程。 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 import java.io.StringReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection; public class Migration{ public static void main(String[] args) { String url = new String("jdbc:postgresql://localhost:8000/postgres"); //数据库URL String user = new String("username"); //GaussDB用户名 String pass = new String("passwd"); //GaussDB密码 String tablename = new String("migration_table_1"); //定义表信息 String delimiter = new String("|"); //定义分隔符 String encoding = new String("UTF8"); //定义字符集 String driver = "org.postgresql.Driver"; StringBuffer buffer = new StringBuffer(); //定义存放格式化数据的缓存 try { //获取源数据库查询结果集 ResultSet rs = getDataSet(); //遍历结果集,逐行获取记录 //将每条记录中各字段值,按指定分隔符分割,由换行符结束,拼成一个字符串 //把拼成的字符串,添加到缓存buffer while (rs.next()) { buffer.append(rs.getString(1) + delimiter + rs.getString(2) + delimiter + rs.getString(3) + delimiter + rs.getString(4) + "\n"); } rs.close(); try { //建立目标数据库连接 Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, pass); BaseConnection baseConn = (BaseConnection) conn; baseConn.setAutoCommit(false); //初始化表信息 String sql = "Copy " + tablename + " from STDIN with (DELIMITER " + "'" + delimiter + "'" +","+ " ENCODING " + "'" + encoding + "'"); //提交缓存buffer中的数据 CopyManager cp = new CopyManager(baseConn); StringReader reader = new StringReader(buffer.toString()); cp.copyIn(sql, reader); baseConn.commit(); reader.close(); baseConn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(System.out); } catch (SQLException e) { e.printStackTrace(System.out); } } catch (Exception e) { e.printStackTrace(); } } //******************************** // 从源数据库返回查询结果集 //********************************* private static ResultSet getDataSet() { ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:mysql://10.119.179.227:3306/jack?useSSL=false&allowPublicKeyRetrieval=true", "jack", "xxxxxxxxx"); Statement stmt = conn.createStatement(); rs = stmt.executeQuery("select * from migration_table"); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return rs; } } 父主题: 使用COPY FROM STDIN导入数据
  • 对表执行VACUUM 如果导入过程中,进行了大量的更新或删除行时,应运行VACUUM FULL命令,然后运行ANALYZE命令。大量的更新和删除操作,会产生大量的磁盘页面碎片,从而逐渐降低查询的效率。VACUUM FULL可以将磁盘页面碎片恢复并交还操作系统。 对表执行VACUUM FULL。 以表product_info为例,VACUUM FULL命令如下: 1 postgres=# VACUUM FULL product_info VACUUM 父主题: 导入数据
  • 步骤6:优化导入数据的查询性能 在数据导入完成后,执行ANALYZE语句生成表统计信息。执行计划生成器会使用这些统计数据,以生成最有效的查询执行计划。 如果导入过程中,进行了大量的更新或删除行时,应运行VACUUM FULL命令,然后运行ANALYZE命令。大量的更新和删除操作,会产生大量的磁盘页面碎片,从而逐渐降低查询的效率。VACUUM FULL可以将磁盘页面碎片恢复并交还操作系统。 对表product_info执行VACUUM FULL。 1 postgres=# VACUUM FULL product_info; VACUUM 更新表product_info的统计信息。 1 postgres=# ANALYZE product_info; ANALYZE 父主题: 教程:使用GDS从远端服务器导入数据
  • \copy命令 \copy命令格式以及说明参见表1。 表1 \copy元命令说明 语法 说明 \copy { table [ ( column_list ) ] | ( query ) } { from | to } { filename | stdin | stdout | pstdin | pstdout } [ with ] [ binary ] [ delimiter [ as ] 'character' ] [ null [ as ] 'string' ] [ csv [ header ] [ quote [ as ] 'character' ] [ escape [ as ] 'character' ] [ force quote column_list | * ] [ force not null column_list ] ] 在任何gsql客户端登录数据库成功后,可以使用该命令进行数据的导入/导出。但是与SQL的COPY命令不同,该命令读取/写入的文件是本地文件,而非数据库服务器端文件;所以,要操作的文件的可访问性、权限等,都是受限于本地用户的权限。 说明: \COPY只适合小批量、格式良好的数据导入,不会对非法字符做预处理,也无容错能力,无法适用于含有异常数据的场景。导入数据应优先选择COPY。