aidp-object-storage 是一个面向 AIDP 笔记本的技能,用于通过 oci:// URI 方案原生读写 OCI 对象存储数据。它让 Spark 能够直接访问对象存储,认证由 AIDP 集群的 IAM 身份自动完成,用户无需提供 OCI_CONFIG、API 密钥或内联 PEM。
用途
该技能适用于以下场景:从 Spark 在 OCI 存储桶中落地或读取 CSV、Parquet、JSON、Avro、Delta 文件;注册由 OCI 存储桶支持的外部卷(/Volumes/...);在 oci:// 路径上定义外部表(USING CSV/PARQUET/...)。当用户提到 "oci://"、"Object Storage bucket"、"external volume"、"external table" 时可使用。
不适用场景:OCI 对象存储上的 Iceberg 表应使用 aidp-iceberg;AWS S3 应使用 aidp-aws-s3;Azure ADLS Gen2 应使用 aidp-azure-adls。
URI 形式
oci://<bucket>@<namespace>/<path>
其中 namespace 是租户的对象存储命名空间,可在 OCI 控制台的 Object Storage > Bucket Details 中查看。
直接读写
oci_path = "oci://my-bucket@mynamespace/folder/file"
写入: df.write.mode("overwrite").option("header", True).format("csv").save(oci_path)
读取: df_read = spark.read.option("header", True).format("csv").load(oci_path) df_read.show()
同样的模式适用于 format("parquet")、format("json")、format("delta")。
外部卷(DDL)
挂载一次存储桶,之后通过卷路径引用:
CREATE EXTERNAL VOLUME IF NOT EXISTS default.default.ext_volume LOCATION 'oci://my-bucket@mynamespace/';
然后:
volume_path = "/Volumes/default/default/ext_volume/folder/file" df.write.format("csv").option("header", True).save(volume_path) spark.read.option("header", True).format("csv").load(volume_path).show()
删除使用 DROP VOLUME default.default.ext_volume。
外部表(DDL)
注册一个数据位于 oci:// 的表:
CREATE TABLE IF NOT EXISTS default.default.ext_table (name STRING, age INT) USING CSV OPTIONS (path='oci://my-bucket@mynamespace/folder/file', delimiter=',', header='true');
像普通 Spark 表一样查询:
spark.sql("SELECT * FROM default.default.ext_table").show()
删除使用 DROP TABLE default.default.ext_table。
注意事项
认证是隐式的,使用 AIDP 集群的 IAM 身份,用户无需输入 OCI 密钥。如果读取失败并返回 404/403,说明工作区身份缺少存储桶权限,需在 OCI IAM 中修复。
命名空间不等于租户名称。对象存储命名空间是一个独立且不可变的字符串,可在 OCI 控制台的 Profile > Tenancy: <tenancy_name> 中找到 object_storage_namespace 字段。
外部卷路径是 /Volumes/<catalog>/<schema>/<volume>/...,而不是 oci://...。卷注册后,通过卷路径访问文件。
外部表的 path 选项直接使用 oci://,而不是卷路径。两者都可用,选择取决于你想要可重新挂载的抽象(卷)还是简单的直接引用(表)。
/Workspace/... 不用于数据。它是为笔记本和配置设计的 FUSE 挂载文件系统。数据文件请使用 oci:// 或 /Volumes/...。
参考资料
官方示例:oracle-samples/oracle-aidp-samples → getting-started/Access_Object_Storage_Data.ipynb