SPL:访问云对象存储

SPL针对多种云对象存储(亚马逊S3、阿里云OSS、谷歌GCS、微软Azure)各实现了一套命令,能像读写本地数据文件一样方便的读写云上的数据,这样就容易把SPL灵活的计算能力应用到云数据。下面以亚马逊S3为例了解下详细用法。

亚马逊S3

创建/关闭连接

Java 读写 S3API需要配置四个参数,access key secret keyregionendpoint SPL中传入它们就创建S3连接了:

s3_open(accessKey : secretKey : region : endpoint)

使用完S3连接后,用s3_close(s3Conn)关闭连接。

示例:A1创建连接,中间做一些读写、计算操作后,A3关闭A1创建的连接


A

1

=s3_open("AKIA5******MD7AFM2NB"
:"sAel1N8hh******5Ym4+ZTj+PB7X1AtCbC26dn"

:"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)

A2S3上的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上的文件对象;

A3import()函数加载A2的全部数据:

..

A4cursor()函数以游标方式读取文件数据,取出前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中就可以用一致的方式读写、计算各种云对象存储中的数据了。