分析型数据库的查询模式适合在海量数据中进行分析计算后输出适量数据,若需要输出的数据量达到一定规模, 分析型数据库提供数据导出(DUMP)的方式。注意目前DUMP方式中不能使用针对非分区列的聚合函数。
DUMP TO ODPS
通过类DML语句导出到MaxCompute(ODPS)
前提须知:<PRE prettyprinted? linenums>
- --注意正确输入需要授权的表命名、project和正确的云账号
- USE prj_name; --表所属ODPS project
- ADD USER ALIYUN$xxxx@aliyun.com;
- GRANT createInstance ON project prj_name TO USER ALIYUN$xxxx@aliyun.com;
- GRANT Describe,Select,alter,update,drop ON TABLE table_name
- TO USER ALIYUN$xxxx@aliyun.com;
导出命令
类似于普通的SQL查询语句,用户也可通过类似于DML语句进行数据导出。
语法格式:<PRE prettyprinted? linenums>
- DUMP DATA [OVERWRITE] INTO 'odps://project_name/table_name'
- SELECT C1, C2 FROM DB1.TABLE1 WHERE C1 = 'xxxx' LIMIT N;
- DUMP DATA [OVERWRITE] INTO 'odps://project_name/table_name/ds=xxxxxxxx/xxx=xxx'
- SELECT C1, C2 FROM DB1.TABLE1 WHERE C1 = 'xxxx' LIMIT N
注意:
- 目标ODPS表必须包含和SELECT查询选择的列名(别名,如果有别名的话)相同的列,先后顺序必须一致;
- 当指定 OVERWRITE 时,会先DROP目标ODPS表,重新创建后再导出数据;
- 当不指定 OVERWRITE 时,会append追加到目标ODPS表中。
DUMP TO OSS
通过类DML语句导出到表格存储(OSS)
前提须知:<PRE prettyprinted? linenums>
- --注意请申请和您所使用Analyticdb对应集群下的OSS实例,否则可能会由于网络原因导致失败
导出命令
类似于普通的SQL查询语句,通过JDBC接口访问,如果成功则会返回一行记录,其中包含了您指定dump的OSS路径。
语法格式:<PRE prettyprinted? linenums>
- /*+ dump-col-del=[,], dump-row-del=[\n], dump-oss-accesskey-id=oss的ACCESS_KEY_ID,
- dump-oss-accesskey-secret=oss的ACCESS_KEY_SECRET*/
- DUMP DATA [OVERWRITE] INTO
- 'oss://endpoint_domain/bulket_name/filename'
- SELECT C1, C2 FROM DB1.TABLE1 WHERE C1 = 'xxxx' LIMIT N
注意:
- 其中必须在Hint中指定有目标OSS路径写入权限的AK
- 由于OSS中的文件时非结构化存储,为了方便您的使用,我们提供了可以任意指定行列分隔符的配置,通过在Hint中指定 dump-col-del / dump-row-del 即可生效,注意’[]’内为具体的分隔符
- 目标路径最多只支持一级文件夹,目前暂不支持多级目录指定
- 目标路径的文件夹需已经创建成功,目前暂不支持动态创建目录
- 当指定 OVERWRITE 时,会对原有文件进行覆盖写
- 当不指定 OVERWRITE 时,会对原有文件进行追加写
关于返回数据行数(适用于DUMP TO ODPS 和 DUMP TO OSS)
导出方式对海量数据的计算输出具有良好的性能(百万行数据导出在数百毫秒数据级),但是, 对于数据精确度有一定牺牲,即实际返回的数据行数,可能是不完全精确。以限制导出行数为1000为例 (LIMIT 1000):
- 实际数据行数可能稍大于1000,例如此时有120个数据分片,则等同于每个分区明确指定”LIMIT 9”,最多可能返回1080;
- 实际数据行数可能稍小于1000,如果符合条件的行数的总数小于1000;
- 实际数据行数可能稍小于1000,如果数据分片很均匀,例如此时有120个数据分片,如果某些分片返回数据行小于9的话,则等同于每个分区明确指定”LIMIT 9”。
- 可以通过hint指定显示返回行数(默认情况下不显示数据行数),可以通过return-dump-record-count=TRUE来指定返回时显示数据行数。