SPL:访问云对象存储
SPL针对多种云对象存储(亚马逊S3、阿里云OSS、谷歌GCS、微软Azure)各实现了一套命令,能像读写本地数据文件一样方便的读写云上的数据,这样就容易把SPL灵活的计算能力应用到云数据。下面以亚马逊S3为例了解下详细用法。
亚马逊S3
创建/关闭连接
Java 读写 S3的API需要配置四个参数,access key、 secret key、region、endpoint, 在SPL中传入它们就创建S3连接了:
s3_open(accessKey : secretKey : region : endpoint);
使用完S3连接后,用s3_close(s3Conn)关闭连接。
示例:A1创建连接,中间做一些读写、计算操作后,A3关闭A1创建的连接
A |
|
1 |
=s3_open("AKIA5******MD7AFM2NB" :"us-west-1" :"https://s3.us-west-1.amazonaws.com") |
2 |
…… |
3 |
=s3_close(A1) |
管理桶
S3中可以有多个桶(bucket),用s3_bucket(s3Conn,bucket)可以检测、管理桶。
示例:
A |
|
1 |
=s3_open(accessKey : secretKey : region : endpoint) |
2 |
=s3_bucket(A1,"spl-bucket-test1") |
3 |
=s3_bucket@c(A1,"spl-bucket-test1") |
4 |
=s3_bucket@d(A1,"spl-bucket-test1") |
5 |
=s3_close(A1) |
A2检测是否存在名称为"spl-bucket-test1"的桶,存在返回true,不存在返回false。
A3用@c选项创建"spl-bucket-test1"桶,成功创建返回true,已存在或其它原因失败则返回false。
A4用@d选项删除"spl-bucket-test1"桶,成功删除返回true,不是空桶或其它原因失败则返回false。
列出桶/文件
用s3_list(s3Conn,[bucket])能列出所有桶或某个桶下的文件。
示例:
A |
|
1 |
=s3_open(accessKey : secretKey : region : endpoint) |
2 |
=s3_list(A1) |
3 |
=s3_list(A1,"spl-bucket-test1") |
4 |
=s3_close(A1) |
执行后A2列出所有桶:
A3列出"spl-bucket-test1"桶下的文件:
上传下载文件
用s3_copy(s3Conn, bucket : s3File, [localFile])能把本地文件上传到S3,也能把S3文件下载到本地。
示例:
A |
|
1 |
=s3_open(accessKey : secretKey : region : endpoint) |
2 |
=s3_copy(A1, "spl-bucket-test1":"nation.txt","E:/nation2.txt") |
3 |
=s3_copy@u(A1, "spl-bucket-test1":"nation3.txt","E:/nation2.txt") |
4 |
=s3_close(A1) |
A2把S3上的nation.txt下载为本地E:/nation2.txt;
A3用@u选项把本地E:/nation2.txt上传为S3上文件nation3.txt;
加载文件数据
用s3_file(s3Conn, bucketName, s3File [:charset])能直接加载S3文件的数据,方便做后续计算。
示例:
A |
|
1 |
=s3_open(accessKey : secretKey : region : endpoint) |
2 |
=s3_file(A1, "spl-bucket-test1", "nation.txt") |
3 |
=A2.import@t() |
4 |
=A2.cursor@t().fetch(5) |
5 |
=A2.size() |
6 |
=A2.date() |
4 |
=s3_close(A1) |
A2定义S3上的文件对象;
A3用import()函数加载A2的全部数据:
A4用cursor()函数以游标方式读取文件数据,取出前5行:
A5获得文件大小;A6获得文件的最后修改时间。
阿里云OSS/谷歌GCS/微软Azure
各种云对象存储的操作函数几乎一样,只是前缀不同。
阿里云OSS的函数以oss为前缀:
oss_open()、oss_close()、oss_bucket()、oss_list ()、oss_copy()、oss_file();
谷歌GCS的函数以gcs为前缀:
gcs_open()、gcs_close()、gcs_bucket()、gcs_list ()、gcs_copy()、gcs_file();
微软Azure的函数以was为前缀:
was_open()、was_close()、was_bucket()、was_list ()、was_copy()、was_file();
唯一的区别是创建连接的函数略有不同,以下列出四种open函数做对比:
s3_open(accessKey : secretKey : region : endpoint);
oss_open(AccessKey , SecretKey , url);
gcs_open(json) //gcs官网会下载一个包含连接信息的json文件,这里传入文件中的json串;
was_open(AccountName , AccountKey , EndpointSuffix , DefaultEndpointsProtocol);
这些连接需要的信息,各云官网都有详细介绍,并在您自己的云账号中能获得。
创建连接后,在SPL中就可以用一致的方式读写、计算各种云对象存储中的数据了。
英文版