外部目錄

建立外部目錄,從 Oracle AI Data Platform 以外的位置取得資料。

教學課程圖示 LiveLabs Sprint

外部目錄可將 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 不支援從跨可插拔資料庫 (PDB) 或 Oracle 維護的綱要和表格共用的綱要和表格收集資料。

Autonomous AI Lakehouse 和 Autonomous AI Transaction Processing 的必要權限

當您在 AI 資料平台中建立外部目錄時,您用來連線的使用者憑證必須至少具備下列權限:
  • CREATE SESSION 連線至資料庫
  • 透過最低權限授權或專用讀取角色選取必要物件 (表格 / 視觀表 / 外部表格) 的存取權
  • READ,WRITE on DIRECTORY, DATA_PUMP_DIR
如果您要在外部目錄中插入資料或建立新表格,請確保使用者屬於 DWROLE 的一部分。如需詳細資訊,請參閱 Oracle Autonomous AI Transaction Processing 文件,管理 Autonomous AI Database 的使用者權限 - 使用從屬端工具連線。

限制

外部目錄不支援 UPDATE 作業。使用外部目錄表格進行尋找和查詢存取。

即使用來建立外部目錄的證明資料具有執行 DDL 敘述句的權限,也不支援 DDL。

表格名稱外殼會影響在 Oracle Autonomous AI Lakehouse 中建立表格的方式:
  • 如果您以大寫形式提供表格名稱,則會使用大寫字母建立表格,並遵循 Autonomous AI Lakehouse 中的預設不區分大小寫行為。
  • 如果您以小寫形式提供表格名稱,則會在 Autonomous AI Lakehouse 中建立表格並區分大小寫。透過 Autonomous AI Lakehouse 建立之表格的資料欄名稱一律會區分大小寫。
  • 擷取及重新整理外部目錄時,來源資料欄註解的限制為 256 個 UTF-8 位元組。限制的測量單位為位元組,而非字元,因此當包含多位元組字元的註解包含 256 個字元以內時,可以超過限制。若超過此限制,可能會導致描述資料擷取或重新整理失敗。請將來源資料欄註解減少為 256 個 UTF-8 位元組或更少的位元組,然後重試。

建立外部目錄

您可以將目錄從 Oracle AI Data Platform 執行處理連線至外部來源。

  1. 按一下左側導覽窗格中的建立,然後選取目錄。您也可以瀏覽至主目錄,然後按一下 建立型錄圖示 在主目錄中建立目錄。
  2. 填寫姓名與說明欄位。
  3. 從目錄類型下拉式清單中,選取外部目錄。
  4. 選取外部來源類型。
  5. 如果適用,請填寫使用者名稱與密碼。
  6. 預設為啟用 SSL。清除此方塊即可停用 SSL。
  7. 按一下建立。
    從外部來源擷取資料的外部目錄會顯示旋轉圓形圖示。
    主目錄樹狀結構檢視,其中在醒目提示的目錄旁邊有旋轉的「進行中」圖示

    您也可以從工作執行監督進度。

建立專用網路的外部目錄

您可以建立外部目錄,以存取專用網路中的資料來源。

  1. 按一下左側導覽窗格中的建立,然後選取目錄。您也可以瀏覽至主目錄,然後按一下 建立型錄圖示 在主目錄中建立目錄。
  2. 填寫姓名與說明欄位。
  3. 從目錄類型下拉式清單中,選取外部目錄。
  4. 選取外部來源類型:
  5. 如果適用,請填寫使用者名稱與密碼。
  6. 預設為啟用 SSL。清除此方塊即可停用 SSL。
  7. 選取啟用專用網路。
  8. 選取具有所需專用網路組態的工作區。
    如需有關為專用網路設定工作區的資訊,請參閱建立啟用專用網路存取的工作區。
  9. 按一下建立。
    從外部來源擷取資料的外部目錄會顯示旋轉圓形圖示。
    主目錄樹狀結構檢視,其中在醒目提示的目錄旁邊有旋轉的「進行中」圖示

    您也可以從工作執行監督進度。

如何將 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 Database 或 Oracle Autonomous AI Lakehouse 資料庫建立外部目錄。當資料庫只能透過專用網路存取時,請設定具有專用網路存取的 AI Data Platform 工作區,以及資料庫 SCAN 詳細資訊。

此連線使用 TLS 與從屬端證明資料公事包。

需求

在您開始前,請確認:
  • 資料庫已啟動設定且可供使用。
  • 您已下載資料庫從屬端證明資料公事包。
  • 您知道資料庫 SCAN 完整網域名稱和 TLS 監聽器連接埠。
  • SCAN 名稱可以從 AI 資料平台工作區使用的專用網路解析。
  • 網路路由和安全規則允許從工作區網路到資料庫監聽器連接埠的流量。
  • 您有權檢查必要的 VCN、子網路以及網路安全群組。
  • 資料庫使用者具有您要透過外部目錄公開之綱要和物件的 CREATE SESSION 和 SELECT 權限。
  • 資料庫使用者具備進行預期讀取或寫入作業所需的任何其他權限。
只會尋找指定之資料庫使用者可存取的綱要和物件並新增至外部目錄。

建立具有專用連線的工作區

依照建立啟用專用網路存取的工作區中的步驟進行,變更如下:
  • 提供 VCN 和子網路,以連線至您的 Oracle Exadata Cloud@Customer 環境。
  • 在進階網路選項下,選取我的資料來源需要透過 SCAN 代理主機存取。
  • 輸入資料庫 SCAN 完整網域名稱。
  • 輸入資料庫 TLS 監聽器連接埠。

建立外部目錄

依照建立專用網路的外部目錄中提供的步驟,選取下列項目:
  • 對於外部來源類型,請選取 Oracle Autonomous AI Transaction Processing 。
  • 針對連線方法,選取公事包。
  • 上傳從資料庫下載的從屬端證明資料公事包。
  • 從公事包選取必要的資料庫服務。
  • 視需要提供公事包密碼。
  • 選取上面設定的工作區,以存取資料庫網路和 SCAN 位址。
  • 測試連線以確認所有項目都已正確設定。

驗證連線

目錄建立和描述資料尋找完成之後:
  • 確認預期的綱要和表格會顯示在外部目錄中。
  • 啟動或選取專用工作區中的運算叢集。
  • 請使用找到的表格的三個部分名稱來查詢:
SELECT *
FROM <catalog_name>.<schema_name>.<table_name>;

重新整理外部資料目錄

您可以在 Oracle AI Data Platform 中重新整理外部目錄,以將其內容與外部來源同步。

  1. 在左側導覽窗格中,按一下 「主要目錄」圖示 主目錄。
  2. 在「主要」目錄樹狀結構中,選取您要重新整理的外部目錄。
  3. 按一下 Refresh icon 重新整理。
    外部目錄會顯示在主目錄底下,並具有旋轉圓圈圖示,同時會從外部來源擷取資料並更新中繼資料。
    主目錄樹狀結構檢視,其中在醒目提示的目錄旁邊有旋轉的「進行中」圖示

    您也可以從工作執行監督進度,請參閱監督工作。

使用 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 Grammar 。

重新命名外部目錄

如果外部目錄的內容或目的已變更,您可以重新命名該目錄。

  1. 在左側導覽窗格中,按一下 「主要目錄」圖示 主目錄。
  2. 在「目錄」頁籤中,找出您的目錄並按一下 動作 3 點圖示 動作,然後按一下重新命名。

    標示「重新命名」之目錄的動作三點功能表開啟

  3. 編輯型錄名稱,然後按 Enter 鍵。

編輯外部目錄描述

如果外部目錄的內容或目的已變更,您可以修改其描述。

  1. 在左側導覽窗格中,按一下 「主要目錄」圖示 主目錄。
  2. 在「目錄」頁籤中,尋找您的目錄並按一下 動作 3 點圖示 動作,然後按一下編輯描述。

    對已反白顯示「編輯描述」的目錄開啟動作三點功能表

  3. 編輯目錄描述,然後按一下儲存。

變更外部目錄的密碼

您可以更新外部目錄的必要密碼,以便繼續存取來源。

  1. 在左側導覽窗格中,按一下 「主要目錄」圖示 主目錄。
  2. 在「目錄」頁籤中,找出您的目錄並按一下 動作 3 點圖示 動作,然後按一下變更密碼。
  3. 輸入外部目錄的新密碼,然後按一下儲存。

刪除外部目錄

您可以刪除不再需要的外部目錄。

刪除外部目錄只會刪除本機儲存的描述資料。外部資料來源中的資料不受影響。

  1. 在左側導覽窗格中,按一下 「主要目錄」圖示 主目錄。
  2. 在「目錄」頁籤中,找出您的目錄並按一下 動作 3 點圖示 動作,然後按一下刪除。

    已反白顯示「刪除」之目錄的動作三點功能表

  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()