外部目录
创建外部目录以从 Oracle AI Data Platform 之外的位置获取数据。
外部目录将 AI Data Platform 连接到外部数据源(例如 Oracle Autonomous AI Lakehouse 、Oracle AI Database 和 Oracle Autonomous AI Transaction Processing )以及第三方存储(例如 Snowflake、Azure SQL 和 MySQL)。AI Data Platform 可搜索这些源的元数据并将其同步到主目录中,使用户能够浏览和查询远程方案和表,而无需复制基础数据。
外部目录使用在外部目录创建期间提供的身份证明来查询外部源。有关数据源的更多信息,请参阅内部源。
例如,如果为 Autonomous AI Lakehouse 实例创建外部目录,其中使用的 Autonomous AI Lakehouse 用户凭证可以访问 schema1 ,但不能访问 schema2 ,则外部目录中仅显示 schema1 。具有外部目录权限的用户只能查询 Autonomous AI Lakehouse 用户有权访问的模式。
注意:
AI Data Platform 不支持从可插入数据库 (Pluggable Databases,PDB) 之间共享的方案和表或从 Oracle 维护的方案和表中收集数据。Autonomous AI Lakehouse 和 Autonomous AI Transaction Processing 所需的权限
- 用于连接到数据库的 CREATE SESSION
- 通过最小权限授予或专用读取角色对所需对象(表/视图/外部表)的 SELECT 访问权限
- 阅读,写入 DIRECTORY DATA_PUMP_DIR
限制
外部目录不支持 UPDATE 操作。使用外部目录表进行搜索和查询访问。
不支持 DDL,即使用于创建外部目录的身份证明具有执行 DDL 语句的权限也是如此。
- 如果以大写形式提供表名,则会使用大写字母创建表,并遵循 Autonomous AI Lakehouse 中的默认不区分大小写行为。
- 如果您以小写形式提供表名,则会在 Autonomous AI Lakehouse 中创建该表时区分大小写。通过 Autonomous AI Lakehouse 创建的表的列名始终区分大小写。
- 在外部目录摄取和刷新期间,源列注释限制为 256 个 UTF-8 字节。限制以字节(而不是字符)为单位进行测量,因此包含多字节字符的注释在包含 256 个字符或更少时可以超过限制。超出限制可能会导致元数据摄取或刷新失败。将源列注释减少到 256 个 UTF-8 字节或更少,然后重试。
如何将 Oracle Autonomous AI Database on Exadata Cloud@Customer 连接到 Oracle AI Data Platform
您可以在 Oracle Autonomous AI Database on Exadata Cloud@Customer 上为 Oracle Autonomous AI Transaction Processing 、Oracle Autonomous AI Lakehouse 或 Oracle Autonomous AI Database on Exadata Cloud@Customer 数据库创建外部目录。仅通过专用网络访问数据库时,配置具有专用网络访问权限的 AI 数据平台工作区和数据库 SCAN 详细信息。
连接使用带有客户端身份证明 wallet 的 TLS。
要求
- 数据库已预配且可用。
- 您已下载数据库客户端身份证明 wallet。
- 您知道数据库 SCAN 全限定域名和 TLS 监听程序端口。
- 可以从 AI 数据平台工作区使用的专用网络解析 SCAN 名称。
- 网络路由和安全规则允许从工作区网络到数据库监听程序端口的通信。
- 您有权检查所需的 VCN、子网和网络安全组。
- 数据库用户对要通过外部目录公开的方案和对象具有 CREATE SESSION 和 SELECT 权限。
- 数据库用户具有预期的读取或写入操作所需的任何其他权限。
创建具有专用连接的工作区
- 提供 VCN 和子网,以提供与 Oracle Exadata Cloud@Customer 环境的连接。
- 在 Advanced network options(高级网络选项)下,选择 My data sources require access through a SCAN proxy(我的数据源需要通过 SCAN 代理访问)。
- 输入数据库 SCAN 全限定域名。
- 输入数据库 TLS 监听程序端口。
创建外部目录
- 对于外部源类型,选择 Oracle Autonomous AI Transaction Processing 。
- 对于连接方法,选择 Wallet 。
- 上载从数据库下载的客户端身份证明 wallet。
- 从 wallet 选择所需的数据库服务。
- 如果需要,请提供 wallet 密码。
- 选择上面配置了访问数据库网络和 SCAN 地址的工作区。
- 测试连接以确认已正确配置所有内容。
验证连接
- 确认外部目录中出现预期方案和表。
- 在专用工作区中启动或选择计算集群。
- 使用三部分名称查询搜索到的表:
SELECT *
FROM <catalog_name>.<schema_name>.<table_name>;使用 SQL 刷新外部目录
可以使用 SQL 语法刷新外部目录的元数据以及外部目录的方案和表,以将内容与外部源同步。
要刷新外部目录,请在记事本中使用以下 SQL 命令:
REFRESH EXTERNAL CATALOG <<catalog_name>>要刷新外部目录中的方案,请使用:
REFRESH SCHEMA IN EXTERNAL CATALOG <<catalog_name.schema_name>>要刷新外部目录中方案中的表,请使用:
REFRESH TABLE IN EXTERNAL CATALOG <<catalog_name.schema_name.table_name>>有关详细信息,请参阅 SQL 语法。
更改外部目录的密码
您可以更新外部目录的必需密码,以便它可以继续访问源。
- 在左侧导航窗格中,单击
主目录。 - 在“目录”选项卡中,找到目录,然后单击
操作,然后单击更改口令。 - 输入外部目录的新密码,然后单击保存。
从外部目录内的表中删除数据
当将目录和表配置为支持下推 SQL DELETE 时,可以使用 Spark 写入路径从外部目录表中删除行。
使用目录 ID 删除表数据:Python 示例
from pyspark.sql.types import StructType
df = spark.createDataFrame([], StructType([]))
df.write
.format("aidataplatform")
.option("catalog.id", "<catalog>")
.option("pushdown.sql", "DELETE FROM <schema>.<target_table> WHERE ID = 2")
.save()
使用目录 ID 删除表数据:Scala 示例
val df = spark.emptyDataFrame
df.write
.format("aidataplatform")
.option("catalog.id", "<catalog>")
.option("pushdown.sql", "DELETE FROM <schema>.<target_table> WHERE ID = 2")
.save()
用于删除表数据的摄取样式示例:Python 示例
from pyspark.sql.types import StructType
df = spark.createDataFrame([], StructType([]))
df.write
.format("aidataplatform")
.option("data.asset.type", "ORACLE_ALH")
.option("tns.alias", alhTns)
.option("user.name", userName)
.option("wallet.content", alhWalletContent)
.option("password", alhPassword)
.option("pushdown.sql", "DELETE FROM ADMIN.PUSHDOWN_FEATURE WHERE ID = 2")
.save()用于删除表数据的摄取样式示例:Scala 示例
val df = spark.emptyDataFrame
df.write
.format("aidataplatform")
.option("data.asset.type", "ORACLE_ALH")
.option("tns.alias", alhTns)
.option("user.name", userName)
.option("wallet.content", alhWalletContent)
.option("password", alhPassword)
.option("pushdown.sql", "DELETE FROM ADMIN.PUSHDOWN_FEATURE WHERE ID = 2")
.save()


