外部目录

外部目录是从 Oracle AI Data Platform Workbench 之外的位置获取数据的目录。

“教程”图标 LiveLabs Sprint

外部目录连接到 Oracle Autonomous AI LakehouseOracle AI DatabaseOracle Autonomous AI Transaction Processing 等源,以将数据提取到 AI Data Platform Workbench 中。外部目录使用在外部目录创建期间提供的身份证明来查询外部源。有关数据源的更多信息,请参阅内部源

例如,如果为 Autonomous AI Lakehouse 实例创建外部目录,其中使用的 Autonomous AI Lakehouse 用户凭证可以访问 schema1 ,但不能访问 schema2 ,则外部目录中仅显示 schema1 。具有外部目录权限的用户只能查询 Autonomous AI Lakehouse 用户有权访问的模式。

注意:

AI 数据平台工作台不支持从可插入数据库 (Pluggable Databases,PDB) 之间共享的方案和表或从 Oracle 维护的方案和表中收集数据。

Autonomous AI LakehouseAutonomous AI Transaction Processing 所需的权限

AI 数据平台工作台中创建外部目录时,用于连接的用户凭据应至少具有以下权限:
  • 用于连接到数据库的 CREATE SESSION
  • 通过最小权限授予或专用读取角色对所需对象(表/视图/外部表)的 SELECT 访问权限
  • 阅读,写入 DIRECTORY DATA_PUMP_DIR
如果要在外部目录中插入数据或创建新表,请确保用户是 DWROLE 的一部分。有关详细信息,请参阅 Oracle Autonomous AI Transaction Processing 文档、 Manage User Privileges on Autonomous AI Database - Connecting with a Client Tool

限制

外部目录不支持 UPDATE 操作。使用外部目录表进行搜索和查询访问。

不支持 DDL,即使用于创建外部目录的身份证明具有执行 DDL 语句的权限也是如此。

表名大小写会影响在 Oracle Autonomous AI Lakehouse 中创建表的方式。请注意,从 Autonomous AI Lakehouse 中的 AI Data Platform 创建表时的创建行为
  • 如果以大写形式提供表名,则使用大写字母创建表,并遵循 Autonomous AI Lakehouse 中的默认不区分大小写行为。
  • 如果以小写形式提供表名,则会在 Autonomous AI Lakehouse 中以区分大小写的方式创建表。通过 Autonomous AI Lakehouse 创建的表的列名始终区分大小写。

创建外部目录

您可以将目录从 AI 数据平台工作台连接到外部源。

  1. 单击左侧导航窗格中的创建,然后选择目录。您还可以导航到主目录,然后单击 “创建目录”图标 在主目录中创建目录
  2. 填写名称和说明字段。
  3. Catalog Type(目录类型)下拉列表中,选择 External Catalog(外部目录)
  4. 选择外部来源类型。
    • 对于 Oracle Autonomous AI Lakehouse ,请提供 wallet 文件或实例配置。
    • 对于 Oracle Autonomous AI Transaction Processing ,请提供 wallet 文件或实例配置。
    • 对于 Oracle AI Database ,请提供 wallet 文件或实例配置。
    • 对于 Kafka,提供引导服务器。使用逗号分隔多个服务器。(即将提供)
  5. 填写用户名和密码。
  6. SSL 默认情况下处于启用状态。清除该框可禁用 SSL。
  7. 单击创建
    正在从外部源提取数据的外部目录显示旋转圆图标。
    主目录树视图,其中突出显示的目录旁边的旋转“进行中”图标

    您还可以从作业运行监视进度。

为专用网络创建外部目录

您可以创建访问专用网络中数据源的外部目录。

  1. 单击左侧导航窗格中的创建,然后选择目录。您还可以导航到主目录,然后单击 “创建目录”图标 在主目录中创建目录
  2. 填写名称和说明字段。
  3. Catalog Type(目录类型)下拉列表中,选择 External Catalog(外部目录)
  4. 选择外部源类型:
    • 对于 Oracle Autonomous AI Lakehouse ,请提供 wallet 文件或实例配置。
    • 对于 Oracle Autonomous AI Transaction Processing ,请提供 wallet 文件或实例配置。
    • 对于 Oracle AI Database ,请提供 wallet 文件或实例配置。
    • 对于 Oracle Exadata Database Service ,提供主机、端口和服务名称 (host,port,and service name,SID)。
    • 对于 Snowflake,提供 Snowflake 帐户名称、数据库名称和仓库。对于验证方法,选择 Key Pair(密钥对),提供私钥文件和私钥密码短语。
    • 对于 Azure SQL,提供主机、端口、用户名和密码。可以选择包括数据库名称。
    • 对于 MySQL,提供主机、端口、用户名和密码。
    • 对于 Kafka,提供引导服务器。使用逗号分隔多个服务器。(即将提供)
  5. 填写用户名和密码。
  6. 默认情况下,SSL 已启用。清除该框可禁用 SSL。
  7. 选择启用专用网络
  8. 选择具有所需专用网络配置的工作区。
    有关设置为专用网络配置的工作区的信息,请参见 Create a Workspace with Private Network Access Enabled
  9. 单击创建
    正在从外部源提取数据的外部目录显示旋转圆图标。
    主目录树视图,其中突出显示的目录旁边的旋转“进行中”图标

    您还可以从作业运行监视进度。

刷新外部数据目录

可以触发所有外部目录的刷新,以从源更新其内容。

  1. 在主页中,单击主目录
  2. 选择要刷新的外部目录。
  3. 单击 “刷新”图标 刷新
    单击刷新时,工作流将在后台启动,以便从外部目录中提取和更新元数据。正在从外部源中提取数据的目录显示旋转圆图标。
    主目录树视图,其中突出显示的目录旁边的旋转“进行中”图标

    您还可以从作业运行监视进度。

使用 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 语法

编辑外部目录说明

如果外部目录的内容或用途已更改,则可以在创建后编辑其说明。

  1. 在主页中,单击主目录
  2. 在外部目录旁边,单击 “操作三个点”图标 操作,然后单击编辑说明

    突出显示了 "Edit Description"(编辑说明)的已打开目录的操作三点菜单

  3. 对目录说明进行更改,然后单击保存

重命名外部目录

您可以重命名外部目录,以便在目录的内容或用途发生更改时提供描述性标签。

无法重命名默认目录。
  1. 在主页中,单击主目录
  2. 在目录旁边,单击 “操作三个点”图标 操作,然后单击重命名

    为突出显示了“重命名”的目录打开了操作三点菜单

  3. 对目录名称进行更改,然后单击保存

编辑外部目录配置

您可以编辑外部目录的配置以更新所需的密码。

  1. 在主页中,单击主目录
  2. 在目录旁边,单击 “操作三个点”图标 操作,然后单击编辑配置
  3. 输入外部目录的新密码,然后单击保存

删除外部目录

可以删除外部目录以删除所有本地存储的元数据。

删除外部目录只会删除本地存储的元数据。数据源中的数据不受影响。

  1. 在主页中,单击主目录
  2. 在目录旁边,单击 “操作三个点”图标 操作,然后单击删除

    为突出显示了“删除”的目录打开了操作三点菜单

  3. 选择确认删除目录
  4. 单击删除

如何从外部目录中的表中删除数据

当将目录和表配置为支持下推 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()