云服务器内容精选

  • 导出文件的命名规则 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文件。
  • 相关原理 下面分别从以下两类表介绍从集群导出数据到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导出数据。
  • 导出流程 图2 并行导出流程 表1 流程说明 流程 说明 子任务 规划导出数据 创建OBS桶,并在桶中创建导出后的数据文件的存放目录。 详细请参见规划导出数据。 - 创建OBS外表。 创建外表用于帮助OBS指定的待导出数据文件。外表中保存了数据源文件导出后的位置、文件格式、编码格式、数据间的分隔符等信息。 详细内容请参见创建OBS外表。 - 执行导出数据。 在创建好外表后,通过INSERT语句,将数据快速、高效地导出到数据文件中。 详细内容请参见执行导出。 -
  • 相关概念 数据源文件:存储有数据的TEXT、 CS V、ORC文件。 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对于数据的内容是无感知的,即认为对象内的数据为无状态的二进制数据。 外表:用于识别数据源文件中的数据。外表中保存了数据源文件的位置、文件格式、存放位置、编码格式、数据间的分隔符等信息。