Esegui query su tabelle esterne con partizionamento implicito
In Autonomous Database è possibile creare tabelle esterne partizionate implicite da dati partizionati in stile Hive o da semplici dati partizionati in cartelle memorizzati nell'area di memorizzazione degli oggetti cloud.
- Informazioni sulle tabelle esterne con partizionamento implicito
In Autonomous Database utilizzare la proceduraDBMS_CLOUD.CREATE_EXTERNAL_TABLE
per creare tabelle esterne partizionate implicite da dati partizionati in stile Hive o da semplici dati partizionati in cartelle memorizzati nell'area di memorizzazione degli oggetti cloud. - Interrogazione di dati partizionati impliciti esterni con organizzazione file di origine formato Hive
Utilizzare la proceduraDBMS_CLOUD.CREATE_EXTERNAL_TABLE
per creare una tabella esterna partizionata implicita dai dati nell'area di memorizzazione degli oggetti generati dai dati Hive. - Dati di stile non Hive partizionati impliciti esterni delle query
Utilizzare la proceduraDBMS_CLOUD.CREATE_EXTERNAL_TABLE
per creare una tabella esterna partizionata implicita dai dati nello storage degli oggetti generati da dati non Hive.
Argomento padre: Esegui query sui dati esterni con Autonomous Database
Informazioni sulle tabelle esterne con partizionamento implicito
In Autonomous Database utilizzare la procedura DBMS_CLOUD.CREATE_EXTERNAL_TABLE
per creare tabelle esterne partizionate implicite da dati partizionati in stile Hive o da semplici dati partizionati in cartelle memorizzati nell'area di memorizzazione degli oggetti cloud.
Utilizzare la procedura DBMS_CLOUD.CREATE_EXTERNAL_TABLE
per creare tabelle esterne partizionate implicite. Passando le opzioni appropriate a questa procedura, le partizioni vengono derivate dai dati di origine. Le tabelle esterne partizionate supportano la ricerca automatica in runtime delle colonne di partizione e dei relativi valori. La ricerca automatica in runtime delle modifiche nella struttura dell'area di memorizzazione degli oggetti di base, ad esempio l'aggiunta o la rimozione di oggetti, semplifica il processo di manutenzione eliminando la necessità di ulteriori procedure di sincronizzazione richieste da DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE
. Ciò garantisce che i dati siano aggiornati al runtime delle query.
Con il partizionamento implicito, Autonomous Database determina automaticamente le colonne su cui una tabella viene "partizionata" in base alla struttura di file gerarchica dell'origine dello storage degli oggetti. Non è necessario dichiarare esplicitamente uno schema di partizionamento. Il partizionamento implicito offre vantaggi in termini di prestazioni simili a tabelle di partizione senza la necessità di definire in modo esplicito una tabella esterna partizionata utilizzando la procedura DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE
.
Le tabelle esterne partizionate implicite supportano i seguenti stili di denominazione per gli oggetti partizionati nell'area di memorizzazione degli oggetti:
- Formato di denominazione Hive: i dati nello storage degli oggetti generati da Hive hanno il formato seguente.
OBJBUCKET/<table>/<partcol1>=<value1>/<partcol2>=<value2>/file.parquet
Per un esempio, vedere Interrogazione di dati partizionati impliciti esterni con organizzazione file di origine formato Hive
- Formato di denominazione "Pathtail" non Hive: un secondo formato che si trova spesso nei data lake è simile al formato hive, ma il nome della cartella non include le colonne della partizione.
OBJBUCKET/<table>/<value1>/<value2>/file.parquet
Ad esempio, vedere Dati di stile non Hive partizionati impliciti esterni delle query.
Per ulteriori informazioni sui formati di denominazione, vedere Informazioni sulle tabelle esterne con il partizionamento dei file di origine.
DBMS_CLOUD.CREATE_EXTERNAL_TABLE
, le tabelle esterne partizionate implicite possono essere create nei modi seguenti:
- Impostare il tipo di partizione su hive con un determinato elenco di colonne di partizione
In questo caso,
implicit_partition_type
è impostato suhive
eimplicit_partition_columns
fornisce una lista di colonne di partizione.Ad esempio:
DBMS_CLOUD.CREATE_EXTERNAL_TABLE ( table_name => 'mysales', credential_name => 'mycredential', file_uri_list => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet', column_list => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)', format => '{"type":"parquet", "implicit_partition_type":"hive", "implicit_partition_columns":["country","year","month"]}');
- Impostare il tipo di partizione su hive senza fornire un elenco di colonne di partizione
In questo caso,
implicit_partition_type
è impostato suhive
eimplicit_partition_columns
non viene fornito. Le colonne della partizione vengono rilevate automaticamente cercando '=' nel percorso specificato dafile_uri_list
.column_name
si trova a sinistra di '=' e il valore si trova sul lato destro. Se nel percorso non viene trovato uncolumn_name
, viene restituito un errore.Ad esempio:
DBMS_CLOUD.CREATE_EXTERNAL_TABLE ( table_name => 'mysales', credential_name => 'mycredential', file_uri_list => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet', column_list => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)', format => '{"type":"parquet", "implicit_partition_type":"hive"');
- Fornire una lista di colonne di partizione senza specificare il tipo
In questo caso,
implicit_partition_type
non è impostato eimplicit_partition_columns
fornisce una lista di colonne.Ad esempio:
DBMS_CLOUD.CREATE_EXTERNAL_TABLE ( table_name => 'mysales', credential_name => 'mycredential', file_uri_list => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet', column_list => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)', format => '{"type":"parquet", "implicit_partition_columns":["country","year","month"]}');
Per ulteriori informazioni, vedere CREATE_EXTERNAL_TABLE Procedure.
Argomento padre: Query di tabelle esterne con partizionamento implicito
Esegui query su dati partizionati impliciti esterni con organizzazione file di origine formato Hive
Utilizzare la procedura DBMS_CLOUD.CREATE_EXTERNAL_TABLE
per creare una tabella esterna partizionata implicita dai dati nell'area di memorizzazione degli oggetti generati dai dati Hive.
I file di origine di esempio nell'esempio seguente utilizzano il seguente formato di denominazione:
OBJBUCKET/<table>/<partcol1>=<value1>/<partcol2>=<value2>/file.parquet
Considerare i seguenti file di origine di esempio:
OBJBUCKET/sales/country=USA/year=2024/month=01/sales-2024-01.parquet
OBJBUCKET/sales/country=USA/year=2024/month=02/sales-2024-02.parquet
OBJBUCKET/sales/country=USA/year=2024/month=02/sales-2024-03.parquet
Per creare una tabella esterna partizionata implicita con i dati memorizzati in questo formato Hive di esempio, effettuare le operazioni riportate di seguito.
- Ottimizza pianificazione query area di memorizzazione oggetti con l'opzione strict_column_order
Quando una query si rivolge a una cartella dell'area di memorizzazione degli oggetti con un numero molto elevato di file e sottocartelle, la fase di pianificazione ed elenco può diventare il costo principale prima che i dati vengano effettivamente scansionati. Questo è comune con i layout delle cartelle in stile Hive in cui i valori delle partizioni sono incorporati nel percorso.
Argomento padre: Query di tabelle esterne con partizionamento implicito
Ottimizza la pianificazione delle query dell'area di memorizzazione degli oggetti con l'opzione strict_column_order
Quando una query si rivolge a una cartella object-store con un numero molto elevato di file e sottocartelle, la fase di pianificazione e quotazione può diventare il costo principale prima che i dati vengano effettivamente scansionati. Questo è comune con i layout delle cartelle in stile Hive in cui i valori delle partizioni sono incorporati nel percorso.
-
L'impostazione
strict_column_order
è disabilitata per impostazione predefinita. Abilita solo se il layout del percorso è coerente. -
Se le convenzioni delle cartelle cambiano, ad esempio aggiungendo, rimuovendo o riordinando le colonne delle partizioni, è necessario aggiornare l'opzione
partition_columns
e potrebbe essere necessario disabilitare questa opzione.
Abilitare l'opzione strict_column_order
come indicato di seguito.
Se i dati utilizzano percorsi partizionati in stile Hive e le colonne di partizione vengono sempre visualizzate in un ordine fisso e coerente senza segmenti mancanti, abilitare l'ottimizzazione in base alla seguente impostazione:
strict_column_order = true (with partition_type = "hive")
Il database può saltare le directory non necessarie seguendo l'ordine delle partizioni già definite. Ciò significa che non è necessario elencare ogni singolo oggetto, il che può accelerare notevolmente i tempi di pianificazione per set di dati di grandi dimensioni.
Note per l'utilizzo dell'opzione strict_column_order:
-
I percorsi seguono la denominazione e l'ordine Hive, ad esempio:
.../country=US/year=2025/month=09/...
-
Le colonne di partizione mantengono un set e una sequenza fissi, senza riordini o prefissi saltati.
- È necessario ottimizzare l'elenco plan-time per le cartelle contenenti un numero molto elevato di oggetti.
- Impossibile utilizzare questa opzione nei set di dati in cui non sono presenti tutti i prefissi. Ad esempio, alcune cartelle includono year=, mentre altre iniziano con month=).
Esempi: utilizzare l'opzione strict_column_order per le partizioni Hive-Style con DBMS_CLOUD.CREATE_EXTERNAL_TABLE
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'sales_xt',
credential_name => 'MY_CREDENTIAL',
file_uri_list => 'https://objectstorage.example.com/n/tenant/b/lake/o/sales/',
-- Data is stored as: .../country=US/year=2025/month=09/*.parquet
column_list => 'product VARCHAR2(100),
units NUMBER,
amount NUMBER,
country VARCHAR2(30),
year NUMBER,
month NUMBER',
format => '{
"type": "parquet",
"implicit_partition_config": {
"partition_type": "hive",
"partition_columns": ["country","year","month"],
"strict_column_order": true
}
}'
);
END;
/
Verificare che la logica di pianificazione evita di elencare percorsi di livello superiore non correlati (ad esempio percorsi appartenenti ad altri paesi o anni):
- Eseguire una query selettiva che vincola le partizioni iniziali, ad esempio:
conSELECT COUNT(*) FROM sales_xt WHERE country = ''US'' AND year = 2025;
.strict_column_order = true
- Se le ipotesi di layout non vengono soddisfatte, disabilitare l'opzione e riprovare.
Interroga dati stile non Hive partizionati impliciti esterni
Utilizzare la procedura DBMS_CLOUD.CREATE_EXTERNAL_TABLE
per creare una tabella esterna partizionata implicita dai dati nello storage degli oggetti generati da dati non Hive.
I file di origine di esempio nell'esempio seguente utilizzano il seguente formato di denominazione:
OBJBUCKET/<table>/<value1>/<value2>/file.parquet
Considerare i seguenti file di origine di esempio:
OBJBUCKET/sales/USA/2024/01/sales-2024-01.parquet
OBJBUCKET/sales/USA/2024/01/sales-2024-02.parquet
OBJBUCKET/sales/USA/2024/01/sales-2024-03.parquet
Per creare una tabella esterna partizionata implicita con i dati memorizzati in questo formato Hive di esempio, effettuare le operazioni riportate di seguito.
Argomento padre: Query di tabelle esterne con partizionamento implicito