将ADS中的数据导出,有2种思路,通过select或dump实现。这两种方法各有优缺点。
select导出
因为ADS支持MySQL客户端,通过客户端,可以编写select进行数据导入。在这个过程中需要解决1个问题:
- select在公共云上查询的返回行数最大为10000行,所以无法通过select无法一次获取所有的数据
- limit语法只支持[0,n],不支持[m,n]
- 没有提供rownum或者其它可以获取行数的函数
所以,使用select的方式还是挺麻烦的。
dump导出
语法
dump可以导出海量的数据,语法如下:
DUMP DATA
[OVERWRITE] INTO 'odps://project_name/table_name'
SELECT C1, C2 FROM DB1.TABLE1 WHERE C1 = 'xxxx' LIMIT 100000
在导入之前需要先在ODPS对garuda_data@aliyun.com赋权,
对于项目,需要createInstance权限,
对于目的表,需要describe、select、alter、update、drop权限。
例子
ODPS中操作:add user aliyun$garuda_data@aliyun.com;
grant createinstance on project project_test to user aliyun$garuda_data@aliyun.com;
grant describe,select,alter,update,drop on table ads_test to user aliyun$garuda_data@aliyun.com;
ADS中操作:
DUMP DATA
OVERWRITE INTO 'odps://project_test/ads_test'
SELECT book_name,line_no,contents FROM d_novel_b