zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

向分析型数据库ADS中导入数据

2023-09-14 09:04:37 时间

        ADS是阿里云提供的分析性数据库,实现百亿数据毫秒级计算。

        在使用ADS进行分析之前,需要先将数据导入到ADS中。

1 两种方法

        ADS导入分为两种:批量导入和实时导入。这两种导入方式,是在建表的时候确定的。

1.1 批量导入

        建表的时候,需要指定updateType=batch

        批量导入目前仅支持数据源为ODPS表的导入,且要求ADS中的字段名称和ODPS表中的字段名称一致。步骤如下:

        (1)在ODPS准备数据

                 a) 如果表不存在,在ODPS建立表,比如Table_A

                 b) 向表中导入数据

                 c) 给用户ALIYUN$garuda_build@aliyun.com赋权。这个用户是阿里云(公有云)指定的用户,

                如果需要从ODPS向ADS导入数据,就需要给这个用户赋权。操作如下:

add user ALIYUN$garuda_build@aliyun.com;--如果用户不存在,需要先建立

grant describe,select on table Table_A to user ALIYUN$garuda_build@aliyun.com;--将需要导出的表的descibe,select权限赋给用户

处理上述的赋权之外,还需要确认ODPS是否打开了项目保护。如果打开项目保护,此时数据只允许在项目内流动,无法流出到项目外,自然无法导入到ADS。

查看是否打开项目保护的命令如下:

show SecurityConfiguration;

如果ProjectProtection=true,这说明项目保护已经打开,此时需要做一些额外的权限操作:

要么将项目保护关闭,要么设置ExceptionPolicy。

具体操作参考:项目空间的数据保护设置

(https://help.aliyun.com/document_detail/27929.html?spm=5176.doc27930.6.225.hNQZZI)

         (2)在ADS中操作

               SQL语法如下:

LOAD DATA FROM sourcepath [IN VERSION dataVersion] [OVERWRITE] INTO TABLE tablename [PARTITION (partition_name,...)]

               sourcepath格式如下:

odps:// project / table /[ partition-1=v1 /.../ partition-n=vn ]

               在这里,具体的命令如下:

LOAD DATA FROM odps://project_test/Table_A OVERWRITE INTO TABLE ads_test_01.Table_A

1.2 实时导入
INTO tbl_name (col1,col2...) VALUES (value1, value2...), (value1, value2...)....

       因为实时表都有主键,如果发生主键冲突,默认执行覆盖行为;

     如果使用INSERT IGNORE语法,则丢弃新插入的数据,保留原有数据。

 


        设置"writeMode":"insert", 具体设置参考https://github.com/alibaba/DataX/tree/master/adswriter

        上面讲到了,ads目前仅支持数据源为ODPS表的导入。

         adswriter的实现方式是,首先将其它数据源的数据保存到odps中的临时表中,然后在讲odps中的数据导入到ads中。

         需要注意权限问题:因为导入到odps中的是临时表,现在adswriter还没有对临时表赋权descibe,select给用户ALIYUN$garuda_build@aliyun.com,所以会导入失败。

         因为实现不知道建立的表的名字是什么,所以在进行权限设置时,使用policy的方式。

       adswriter建立的临时表是以ads数据库名称为前缀,所以,可以建立如下策略:

{

"Version": "1",

"Statement":

 "Effect":"Allow",

 "Principal":"ALIYUN$garuda_build@aliyun.com",

 "Action":["odps:Describe","odps:Select"],

 "Resource":"acs:odps:*:projects/project_test/tables/ads_test*"

}
2.2 实时更新

         设置"writeMode":"insert", 具体设置参考https://github.com/alibaba/DataX/tree/master/adswriter


3 不同用户间的数据导入

          如果想将用户A的ODPS中的数据导入到用户B的ADS中,需要做一些权限设置。

          因为为了保护用户的数据安全,ADS目前仅允许导入操作者为Proejct Owner的ODPS Project的数据,

        或者操作者为ODPS Table的创建者。

          赋权的过程如下:

          a) 在用户A的ODPS中,添加用户B

          b) 在用户A的ODPS中,给用户B赋权:比如建表、查询等的权限

          c) 使用用户B登录ODPS,然后切换到用户A的项目空间下

          d) 切换之后,建立表TableA

          e) 将A的ODPS中的数据导入到TableA

          f) 然后执行批量导入

        这些步骤还是 挺麻烦的,不过是可以将不同用户下的数据导入到ADS中的

      在导入过程中 ,出现问题最多的就是权限问题。




数据库实验一:数据库与数据表定义(2)—— 数据表相关操作 使用T-SQL命令方法创建自定义数据类型myName2为Nvarchar(20),不允许为空;自定义数据类型myDept为char(50),允许为空。(提示:CREATE TYPE…FROM命令)
TCGA数据库的利用(二)—— 数据处理 上一篇文章介绍的是关于TCGA数据的下载,如果不太清楚怎么下载数据的读者请参考这篇文章:TCGA数据库的利用(一)—— 数据下载!,而本篇文章主要介绍一下数据的处理过程,因为数据下载之后都是单一样本存储而且样本名称都是以非规则性超长字符命名,进行数据分析之前需要把样本名称转化为TCGA样本编号,例如这种形式的:TCGA-A8-A07I-01A-11R-A00Z-07;这里我以乳腺癌的RNA-seq数据作为样例,从数据库中下载了200个乳腺癌样本,每个样本中都含6万多个基因的表达数据。
批量将本地gis数据导入postgis数据库 以前在处理gis数据的时候,都是直接导入本地shp素材、本地geojson素材,本地topojson素材,自从接触postgis数据之后,深感使用规范的存储系统来统一管理gis数据的好处,特别是数据量大了之后,优势便更加明显,你可以选择将很多需要做空间计算的步骤转移到Postgis数据库内进行计算,要知道Postgis提供的空间计算能力与R和Python这种应用导向的工具相比,优势要大得多。