使用外部表格快取改善查詢效能
外部表格快取會在您的資料庫中建立為綱要物件,其配置的實體空間與表格和索引儲存在資料檔中的方式類似。當您建立外部表格快取時,會在您的綱要中建立新表格,而為綱要設定的所有空間配額限制也會套用至外部表格快取。
相關主題
關於 Autonomous Database 中的外部表格快取
外部表格快取是 Autonomous Database 中儲存外部表格資料的儲存區。
外部資料不是由資料庫管理;不過,您可以使用外部表格來查詢資料庫外部的資料。外部表格的查詢不會和資料庫表格的查詢一樣快,因為每次存取資料時,都必須從儲存在物件存放區的外部檔案擷取這些資料。
外部表格快取功能可讓您從 Autonomous Database 內的外部表格快取經常存取的資料,而不需要修改可存取資料的應用程式,從而更快存取外部表格。
-
提升效能:查詢速度快上數倍,適用於經常存取的外部資料 - 適合定期存取相同資料的儀表板、報表及分析工具。
-
100% 透明:快取機制完全透明;應用程式無須變更查詢、儀表板或應用程式,即可受益於更快的速度。
-
較低的雲端成本:在多雲端應用程式中,快取可降低從遠端儲存擷取重複外部資料的需求,進而降低與跨區域或雲端存取資料相關的資料傳出費用。
-
Parquet
-
ORC
-
AVRO
-
Iceberg 桌子
請參閱查詢外部資料以瞭解詳細資訊。
必備條件
列出建立外部表格快取的先決條件。
-
您必須具有
DBMS_EXT_TABLE_CACHE
套裝軟體的EXECUTE
權限。請注意,您只能在自己的綱要和您所擁有的外部表格中建立外部表格快取。 -
您必須為綱要配置適當的空間配額,以確保快取資料有足夠的儲存容量。
-
您必須要有證明資料,才能存取儲存在物件存放區中的外部表格檔案。如果您啟用存取 Oracle Cloud Infrastructure 物件存放區的資源主體證明資料,就不需要建立證明資料。
限制
列出有關在 Autonomous Database 中使用外部表格快取的重要注意事項和限制。
-
您只能在自己的綱要和您所擁有的外部表格中建立外部表格快取。
-
外部表格快取只能包含來自單一外部表格的檔案。
-
您無法授與外部表格快取的權限,而且只能從您擁有的外部表格快取存取資料。
-
從物件存放區刪除檔案時,快取中的對應資料會標記為無效且無法存取。
建立外部資料表快取
執行 DBMS_EXT_TABLE_CACHE.CREATE_CACHE
以建立外部表格快取。
建立快取時,一開始是空的,並啟用植入。快取大小會在每次新增檔案時增加,視綱要定義的空間配額限制而定,直到達到指派的限制為止。請參閱設定外部表格快取的選擇性大小偏好設定以瞭解詳細資訊。
將檔案填入外部表格快取
顯示將檔案填入外部表格快取的範例。
建立快取之後,您可以將檔案填入快取中。植入檔案會將指定外部表格檔案的內容載入快取中。您可以選擇從表格填入所有檔案、特定百分比的表格,或指定篩選條件來限制要填入的檔案。例如,您可以根據檔案的名稱或日期範圍來篩選檔案。
Oracle 會根據配置給綱要的空間配額,嘗試將檔案填入快取中。如果達到指定的配額限制,除非配置必要的空間,否則 Oracle 會停止填入檔案。
外部表格快取不會自動重新整理。若要在修改物件存放區上的檔案時更新快取,您必須重新填入檔案。
從物件存放區刪除檔案時,對應的快取資料會立即變成無效,而且無法擷取。
新增表格至外部表格快取
使用 DBMS_EXT_TABLE_CACHE.ADD_TABLE
將整個表格或特定百分比的外部表格填入快取中。
範例
BEGIN
DBMS_EXT_TABLE_CACHE.ADD_TABLE
(
owner => 'SALES',
table_name => 'STORE_SALES');
END;
/
此範例會嘗試將 STORE_SALES
表格填入快取中,略過任何已填入的現有檔案。
BEGIN
DBMS_EXT_TABLE_CACHE.ADD_TABLE
(
owner => 'SALES',
table_name => 'STORE_SALES',
percent_files => 80);
END;
/
此範例會嘗試將 STORE_SALES
表格的 80% 填入快取中,略過已填入的任何現有檔案。
percent_files
參數是選擇性的;如果您未指定此參數,整個表格就會填入快取中。
如需詳細資訊,請參閱 ADD_TABLE 程序。
新增檔案至外部表格快取
-
ADD_FILE
:新增單一檔案至快取。 -
ADD_BY_LIKE
:根據指定的路徑篩選新增一或多個指定的檔案。 -
ADD_LATEST_FILES
:根據指定的時間間隔新增一或多個檔案。
範例
DBMS_EXT_TABLE_CACHE.ADD_FILE
程序將單一檔案填入外部表格快取中。舉例而言:BEGIN
DBMS_EXT_TABLE_CACHE.ADD_FILE
(
owner => 'SALES',
table_name => 'STORE_SALES',
file_url => 'https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet'
);
END;
/
此範例會將 salesdata.parquet
檔案中的資料填入快取中。
此範例會在指定的檔案存在於快取中且自上次快取檔案後尚未修改時,略過將檔案填入快取中。
如需詳細資訊,請參閱 ADD_FILE 程序。
DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE
程序,將一或多個檔案填入外部表格快取中。舉例而言:BEGIN
DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE
(
owner => 'SALES',
table_name => 'STORE_SALES',
path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet",
"https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata1.parquet"]'
);
END;
/
此範例會將 salesdata.parquet
和 salesdata1.parquet
檔案的資料填入快取中,略過已填入的任何現有檔案。
BEGIN
DBMS_EXT_TABLE_CACHE.ADD_BY_LIKE
(
owner => 'SALES',
table_name => 'STORE_SALES',
path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data1.parquet",
"https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data2.parquet"]',
esc_char => '#',
force => TRUE);
END;
/
此範例會將 sales_data1.parquet
和 sales_data2.parquet
檔案填入快取中。
在此範例中,會將 '#
' 字元定義為遁離字元。在 '#
' 後面的 '_
' 字元會被視為文字底線,而不是作為符合任何單一字元的萬用字元。
如需詳細資訊,請參閱 ADD_BY_LIKE 程序。
DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES
程序,根據上次修改日期將一或多個檔案植入外部表格快取。舉例而言:BEGIN
DBMS_EXT_TABLE_CACHE.ADD_LATEST_FILES
(
owner => 'SALES',
table_name => 'STORE_SALES',
since => INTERVAL '7' DAY,
max_files => 5,
force => TRUE);
END;
/
since
參數會指定時間間隔;只有過去 7 (7) 天內修改的檔案才可以填入快取中。
max_files
參數會限制可填入快取中的檔案數目。此範例僅植入五個 (5) 檔案。
force
參數會強制在快取中覆寫指定的檔案,即使未修改檔案也一樣。
如需詳細資訊,請參閱 ADD_LATEST_FILES 程序。
從外部表格快取刪除檔案
顯示從外部表格快取刪除檔案的範例。
清除外部表格快取
使用 DBMS_EXT_TABLE_CACHE.CLEAR
可刪除外部表格快取中的所有檔案。舉例而言:
BEGIN
DBMS_EXT_TABLE_CACHE.CLEAR
(
owner => 'SALES',
table_name => 'STORE_SALES');
END;
/
此範例會刪除 STORE_SALES
快取中的所有檔案,並取消配置已移除檔案所使用的全部空間。
請參閱清除程序以瞭解詳細資訊。
從外部表格快取刪除檔案
-
DROP_FILE
:從快取中刪除單一檔案。 -
DROP_BY_LIKE
:根據指定的路徑篩選,從快取中刪除一或多個檔案。 -
RETIRE_FILES
:根據指定的間隔從快取刪除一或多個檔案。
範例
使用 DBMS_EXT_TABLE_CACHE.DROP_FILE
從外部表格快取中刪除檔案。舉例而言:
BEGIN
DBMS_EXT_TABLE_CACHE.DROP_FILE
(
owner => 'SALES',
table_name => 'STORE_SALES',
file_url => 'https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet'
);
END;
/
此範例會從快取中刪除 salesdata.parquet
檔案,並取消配置已移除檔案所使用的全部空間。
如需詳細資訊,請參閱 DROP_FILE 程序。
使用 DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE
,根據 path_filters
參數刪除一或多個檔案。舉例而言:
BEGIN
DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE
(
owner => 'SALES',
table_name => 'STORE_SALES',
path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata.parquet",
"https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/salesdata1.parquet"]'
);
END;
/
此範例會將 salesdata.parquet
和 salesdata1.parquet
檔案從快取中刪除,然後取消配置已移除檔案所使用的全部空間。
BEGIN
DBMS_EXT_TABLE_CACHE.DROP_BY_LIKE
(
owner => 'SALES',
table_name => 'STORE_SALES',
path_filters => '["https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data1.parquet",
"https://swiftobjectstorage.us-ashburn-1.oraclecloud.com/v1/your_namespace/your_bucket/sales#_data1.parquet"]'
);
END;
/
此範例會將 sales#_data1
和 sales#_data2
檔案從快取中刪除,然後取消配置已移除檔案所使用的全部空間。
在此範例中,會將 '#
' 字元定義為遁離字元。在 '#
' 後面的 '_
' 字元會被視為文字底線,而不是作為符合任何單一字元的萬用字元。
如需詳細資訊,請參閱 DROP_BY_LIKE 程序。
使用 DBMS_EXT_TABLE_CACHE.RETIRE_FILES
可根據指定的間隔刪除一或多個檔案。舉例而言:
BEGIN
DBMS_EXT_TABLE_CACHE.RETIRE_FILES
(
owner => 'SALES',
table_name => 'STORE_SALES',
before => INTERVAL '30' DAY);
END;
/
此範例會刪除快取中超過三十 (30) 天的檔案,並取消配置已移除檔案所使用的所有空間。
如需詳細資訊,請參閱 RETIRE_FILES 程序。
上述範例會從快取中移除一或多個檔案,同時保留快取。您可以視需要再次將檔案載入快取中。請參閱將檔案填入外部表格快取以瞭解詳細資訊。
停用及啟用外部表格快取
顯示停用和啟用外部表格快取的範例。
執行 DBMS_EXT_TABLE_CACHE.DISABLE
以停用資料庫的外部表格快取。停用快取並不會將資料從快取中刪除;而是會將快取標記為 DISABLED ,最佳化處理程式也無法將快取用於查詢重寫。
範例
BEGIN
DBMS_EXT_TABLE_CACHE.DISABLE
(
owner => 'SALES',
table_name => 'STORE_SALES');
END;
/
此範例會停用 STORE_SALES
快取。
請參閱 DISABLE 程序瞭解詳細資訊。
停用外部表格快取之後,請使用 DBMS_EXT_TABLE_CACHE.ENABLE
來啟用快取。
BEGIN
DBMS_EXT_TABLE_CACHE.ENABLE
(
owner => 'SALES',
table_name => 'STORE_SALES'
);
END;
/
此範例會啟用 STORE_SALES
快取。
請參閱啟用程序以瞭解詳細資訊。
刪除外部表格快取
顯示一個範例,以刪除外部表格快取。
執行 DBMS_EXT_TABLE_CACHE.DROP_CACHE
以刪除外部表格快取。DBMS_EXT_TABLE_CACHE.DROP_CACHE
程序會從資料庫中移除指定的外部表格快取,並釋出與快取關聯的儲存體空間。
範例:
BEGIN
DBMS_EXT_TABLE_CACHE.DROP_CACHE
(
owner => 'SALES',
table_name => 'STORE_SALES');
END;
/
此範例會刪除 SALES
綱要中的 STORE_SALES
快取。
刪除快取會從資料說明中移除其描述資料,並刪除其所有快取的資料。
如需詳細資訊,請參閱 DROP_CACHE 程序。
USER_EXTERNAL_TAB_CACHES
檢視以確認快取已刪除。舉例而言:SELECT external_table_name, cached
FROM user_external_tab_caches;
如需詳細資訊,請參閱 DBA_EXTERNAL_TAB_CACHES 和 USER_EXTERNAL_TAB_CACHES 檢視。
檢視外部表格快取資訊
Autonomous Database 提供檢視,可讓您監督外部表格快取。
檢視 | 描述 |
---|---|
提供資料庫中所有外部表格快取或使用者之外部表格快取的相關資訊。 |
|
提供目前使用者可存取且屬於快取之外部表格的雲端儲存中檔案相關資訊。 |
|
提供目前使用者擁有且屬於快取之外部表格的雲端儲存中檔案相關資訊。此檢視不會顯示 |
設定外部表格快取的選擇性大小偏好設定
您可以使用 DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY
程序來設定外部表格快取的偏好設定和空間配額限制。
使用者預設會停用外部表格快取。若要啟用和建立外部表格快取,請使用 DBMS_EXT_TABLE_CACHE.CREATE_CACHE
程序。快取會在您的預設綱要中建立,並繼承為綱要定義的任何空間配額限制。不過,您也可以使用 DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY
程序定義外部表格快取的空間配額。您可以使用 DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY
程序的 PROPERTY_NAME
和 PROPERTY_VALUE
參數來設定空間配額限制。
PROPERTY_NAME
參數接受 MAX_CACHE_SIZE
和 MAX_CACHE_PERCENT
值。MAX_CACHE_SIZE
特性會指定外部快取大小總計 (位元組)。MAX_CACHE_PERCENT
特性會將外部快取大小總計指定為指定之使用者配額的百分比。
-
定義
MAX_CACHE_SIZE
、MAX_CACHE_PERCENT
和空間配額時,MAX_CACHE_PERCENT
的優先順序高於MAX_CACHE_SIZE
。 -
僅定義
MAX_CACHE_SIZE
,且未定義MAX_CACHE_PERCENT
或空間配額時,會優先採用MAX_CACHE_SIZE
。 -
若只定義空間配額,但未定義
MAX_CACHE_SIZE
和MAX_CACHE_PERCENT
,則快取大小配額預設為綱要配額總計的 10%。 -
未定義
MAX_CACHE_SIZE
、MAX_CACHE_PERCENT
或空間配額時,快取空間配額預設為UNLIMITED
。
範例
BEGIN
DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY
(
property_name => 'MAX_CACHE_PERCENT',
property_value => 50,
owner => 'SALES');
END;
/
此範例會將 SALES
綱要的快取偏好設定設為 MAX_CACHE_PERCENT
。
property_value
為 50%,指定 SALES
綱要的快取空間配額上限為 SALES
定義的總空間配額 50%。
BEGIN
DBMS_EXT_TABLE_CACHE.SET_USER_PROPERTY
(
owner => 'SALES',
property_name => 'MAX_CACHE_SIZE',
property_value => 5368709120);
END;
/
此範例會將 SALES
綱要的快取偏好設定設為 MAX_CACHE_SIZE
。
property_value
為 5368709120
,指定 SALES
綱要的快取大小上限為 5GB。
如需詳細資訊,請參閱 SET_USER_PROPERTY 程序和 CREATE_CACHE 程序。
使用 DBMS_EXT_TABLE_CACHE.GET_USER_PROPERTY
擷取快取大小特性。
範例:
SET SERVEROUTPUT ON
DECLARE
max_cache_sz NUMBER,
BEGIN
max_cache_sz := DBMS_EXT_TABLE_CACHE.GET_USER_PROPERTY
(
property_name => 'MAX_CACHE_SIZE',
owner => 'SALES');
END;
/
如需詳細資訊,請參閱 GET_USER_PROPERTY 函數。
外部表格描述資料資料欄
外部表格中繼資料可協助您決定執行查詢時來自何處的資料。
您使用 DBMS_CLOUD.CREATE_EXTERNAL_TABLE
、DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE
或 DBMS_CLOUD.CREATE_HYBRID_PART_TABLE
建立的外部表格包含兩個不顯示的資料欄 file$path
和 file$name
。這些資料欄可協助識別記錄的來源檔案。
-
file$path
:指定直到物件名稱開頭為止的檔案路徑文字。 -
file$name
:指定物件名稱,包括最後 "/
" 後面的所有文字。
舉例而言:
SELECT genre_id, name, file$name, file$path FROM ext_genre
WHERE rownum <= 2;
genre_id name file$name file$path
-------- --------- ----------- ----------------------
1 Action genre.csv https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre
2 Adventure genre.csv https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre
請參閱不顯示的資料欄,瞭解不顯示資料欄的詳細資訊。
For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website at http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.
取得 Oracle 支援
Oracle 客戶對於 Oracle 支援服務的取得及使用,應以其 Oracle 訂單中針對適用服務所指定的條款與條件為依據。