向分析型数据库ADS中导入数据 | 您所在的位置:网站首页 › ads导入工程 › 向分析型数据库ADS中导入数据 |
ADS是阿里云提供的分析性数据库,实现百亿数据毫秒级计算。 在使用ADS进行分析之前,需要先将数据导入到ADS中。 1 两种方法ADS导入分为两种:批量导入和实时导入。这两种导入方式,是在建表的时候确定的。 1.1 批量导入建表的时候,需要指定updateType='batch' 批量导入目前仅支持数据源为ODPS表的导入,且要求ADS中的字段名称和ODPS表中的字段名称一致。步骤如下: (1)在ODPS准备数据 a) 如果表不存在,在ODPS建立表,比如Table_A b) 向表中导入数据 c) 给用户[email protected]赋权。这个用户是阿里云(公有云)指定的用户, 如果需要从ODPS向ADS导入数据,就需要给这个用户赋权。操作如下: add user [email protected];--如果用户不存在,需要先建立 grant describe,select on table Table_A to user [email protected];--将需要导出的表的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:////[/.../]在这里,具体的命令如下: LOAD DATA FROM 'odps://project_test/Table_A' OVERWRITE INTO TABLE ads_test_01.Table_A 1.2 实时导入建表的时候,需要指定updateType='realtime' SQL语法如下: INSERT [IGNORE] INTO tbl_name (col1,col2...) VALUES (value1, value2...), (value1, value2...)....因为实时表都有主键,如果发生主键冲突,默认执行覆盖行为; 如果使用INSERT IGNORE语法,则丢弃新插入的数据,保留原有数据。 2 使用DataX导入 DataX中实现了插件adswriter。adswriter支持上面的2中更新方式。 2.1 批量更新设置"writeMode":"insert", 具体设置参考https://github.com/alibaba/DataX/tree/master/adswriter 上面讲到了,ads目前仅支持数据源为ODPS表的导入。 adswriter的实现方式是,首先将其它数据源的数据保存到odps中的临时表中,然后在讲odps中的数据导入到ads中。 需要注意权限问题:因为导入到odps中的是临时表,现在adswriter还没有对临时表赋权descibe,select给用户[email protected],所以会导入失败。 因为实现不知道建立的表的名字是什么,所以在进行权限设置时,使用policy的方式。 adswriter建立的临时表是以ads数据库名称为前缀,所以,可以建立如下策略: { "Version": "1", "Statement": [{ "Effect":"Allow", "Principal":"[email protected]", "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中的 4 总结在导入过程中 ,出现问题最多的就是权限问题。 |
CopyRight 2018-2019 实验室设备网 版权所有 |