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 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 in fase di esecuzione delle query.

Con il partizionamento implicito, Autonomous Database determina automaticamente le colonne su cui è "partizionata" una tabella 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 mediante 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:

Per ulteriori informazioni sulla denominazione dei formati, vedere Informazioni sulle tabelle esterne con il partizionamento di file di origine.

La procedura DBMS_CLOUD.CREATE_EXTERNAL_TABLE consente di creare tabelle esterne partizionate implicite nei modi riportati di seguito.
  • Impostare il tipo di partizione su hive con un determinato elenco di colonne di partizione

    In questo caso, implicit_partition_type è impostato su hive e implicit_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 viene impostato su hive e implicit_partition_columns non viene fornito. Le colonne della partizione vengono rilevate automaticamente cercando '=' nel percorso specificato da file_uri_list. Il valore column_name si trova a sinistra di '=' e si trova sul lato destro. Se nel percorso non viene trovato un valore column_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 e implicit_partition_columns fornisce un elenco 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 Procedura.

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 generata dai dati Hive.

I file di origine di esempio riportati nell'esempio seguente utilizzano questo 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.

  1. Memorizzare le credenziali dell'area di memorizzazione degli oggetti utilizzando la procedura DBMS_CLOUD.CREATE_CREDENTIAL.

    Ad esempio:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password' );
    END;
    /

    La creazione di una credenziale per accedere all'area di memorizzazione degli oggetti di Oracle Cloud Infrastructure non è necessaria se si abilitano le credenziali del principal risorsa. Per ulteriori informazioni, consulta la sezione relativa all'uso del principal delle risorse per accedere alle risorse di Oracle Cloud Infrastructure.

    Questa operazione memorizza le credenziali nel database in formato cifrato. È possibile utilizzare qualsiasi nome per il nome della credenziale. Tenere presente che questo passo è necessario una sola volta a meno che le credenziali dell'area di memorizzazione degli oggetti non vengano modificate. Dopo aver memorizzato le credenziali, è possibile utilizzare lo stesso nome di credenziale per creare tabelle esterne.

    Vedere CREATE_CREDENTIAL Procedura per informazioni sui parametri username e password per diversi servizi di storage degli oggetti.

  2. Creare una tabella esterna partizionata implicita nella parte superiore dei file di origine utilizzando la procedura DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.
    In questo esempio, poiché l'opzione di formato implicit_partition_columns non viene fornita, le colonne delle partizioni vengono rilevate automaticamente e il partizionamento implicito viene abilitato impostando l'opzione di formato implicit_partition_type su hive.

    Tuttavia, se viene fornita una lista di colonne, tali colonne vengono utilizzate come colonne di partizione e Autonomous Database non tenta di trovare le colonne.

    Per rilevare le colonne di partizione, Autonomous Database inizia la ricerca dall'inizio del percorso, specificato da file_uri_list, per '='. Se trovata, la parte sinistra di '=' fino all'ultimo '/' viene considerata come colonna (ad esempio "paese") e la parte destra di '=', fino al primo '/' come valore (ad esempio "USA"). La ricerca continua per '=' fino a dopo '/' che segue il valore della prima partizione, rilevando il secondo '=' nel percorso e così via.

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'DEF_CRED_NAME',
       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"');

    Di seguito sono riportati i parametri disponibili.

    • table_name: è il nome della tabella esterna.

    • credential_name: è il nome della credenziale creata nel passo precedente.

    • file_uri_list: è una lista delimitata da virgole di URI file di origine. L'elenco include due opzioni:

      • Specificare una lista delimitata da virgole di singoli URI file senza caratteri jolly.

      • Specificare un singolo URI file con caratteri jolly, in cui i caratteri jolly possono essere solo dopo l'ultima barra "/". Il carattere "*" può essere utilizzato come carattere jolly per più caratteri, il carattere "?" può essere utilizzato come carattere jolly per un singolo carattere.

    • column_list: è una lista delimitata da virgole di nomi di colonna e tipi di dati per la tabella esterna. La lista include le colonne all'interno del file di dati e quelle derivate dal nome dell'oggetto (da nomi nel percorso del file specificato da file_uri_list).

      column_list non è necessario quando i file di dati sono file strutturati (Parquet, Avro o ORC).

    • format: definisce le opzioni che è possibile specificare per descrivere il formato del file di origine. L'opzione implicit_partition_type specifica il tipo di formato dei dati come hive.

      Se i dati nel file di origine sono cifrati, decifrare i dati specificando l'opzione di formato encryption. Per ulteriori informazioni sulla decifrazione dei dati, vedere Decifra dati durante l'importazione dallo storage degli oggetti.

      Per ulteriori informazioni, vedere DBMS_CLOUD Opzioni formato pacchetto.

    In questo esempio, namespace-string è lo spazio di nomi dello storage degli oggetti Oracle Cloud Infrastructure e bucketname è il nome del bucket. Per ulteriori informazioni, vedere Informazioni sugli spazi di nomi dello storage degli oggetti.

    Per informazioni dettagliate sui parametri, vedere CREATE_EXTERNAL_TABLE Procedura. Per ulteriori informazioni sui servizi di storage degli oggetti cloud supportati, vedere DBMS_CLOUD Formati URI.

  3. È ora possibile eseguire le query nella tabella partizionata esterna creata nel passo precedente.

    Autonomous Database sfrutta le informazioni di partizionamento della tabella partizionata esterna, assicurandosi che la query acceda solo ai file di dati pertinenti nell'area di memorizzazione degli oggetti.

    Ad esempio:

    SELECT product, units FROM mysales WHERE year='2024' and month='02'

    Questa istruzione SQL esegue una query sui dati nella partizione solo per il mese 02 dell'anno 2024.

Interrogazione di dati di stile esterni impliciti non Hive partizionati

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 riportati nell'esempio seguente utilizzano questo 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.

  1. Memorizzare le credenziali dell'area di memorizzazione degli oggetti utilizzando la procedura DBMS_CLOUD.CREATE_CREDENTIAL.

    Ad esempio:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password' );
    END;
    /

    La creazione di una credenziale per accedere all'area di memorizzazione degli oggetti di Oracle Cloud Infrastructure non è necessaria se si abilitano le credenziali del principal risorsa. Per ulteriori informazioni, consulta la sezione relativa all'uso del principal delle risorse per accedere alle risorse di Oracle Cloud Infrastructure.

    Questa operazione memorizza le credenziali nel database in formato cifrato. È possibile utilizzare qualsiasi nome per il nome della credenziale. Tenere presente che questo passo è necessario una sola volta a meno che le credenziali dell'area di memorizzazione degli oggetti non vengano modificate. Dopo aver memorizzato le credenziali, è possibile utilizzare lo stesso nome di credenziale per creare tabelle esterne.

    Vedere CREATE_CREDENTIAL Procedura per informazioni sui parametri username e password per diversi servizi di storage degli oggetti.

  2. Creare una tabella esterna partizionata implicita nella parte superiore dei file di origine utilizzando la procedura DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.
    In questo esempio, il partizionamento implicito viene abilitato fornendo alle colonne di partizione l'opzione di formato implicit_partition_columns. Poiché il nome della cartella non include le colonne della partizione, i valori della partizione nel percorso, specificati da file_uri_list, possono essere trovati solo se viene fornita una lista esplicita di colonne con l'opzione di formato implicit_partition_columns. Per rilevare i rispettivi valori di colonna nel percorso, l'ordine delle colonne deve essere uguale all'ordine dei valori.

    Le colonne della partizione vengono rilevate automaticamente.
    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'DEF_CRED_NAME',
       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"]}');

    Di seguito sono riportati i parametri disponibili.

    • table_name: è il nome della tabella esterna.

    • credential_name: è il nome della credenziale creata nel passo precedente.

    • file_uri_list: è una lista delimitata da virgole di URI file di origine. L'elenco include due opzioni:

      • Specificare una lista delimitata da virgole di singoli URI file senza caratteri jolly.

      • Specificare un singolo URI file con caratteri jolly, in cui i caratteri jolly possono essere solo dopo l'ultima barra "/". Il carattere "*" può essere utilizzato come carattere jolly per più caratteri, il carattere "?" può essere utilizzato come carattere jolly per un singolo carattere.

    • column_list: è una lista delimitata da virgole di nomi di colonna e tipi di dati per la tabella esterna. La lista include le colonne all'interno del file di dati e quelle derivate dal nome dell'oggetto (da nomi nel percorso del file specificato da file_uri_list).

      column_list non è necessario quando i file di dati sono file strutturati (Parquet, Avro o ORC).

    • format: definisce le opzioni che è possibile specificare per descrivere il formato del file di origine. L'opzione implicit_partition_type non è impostata. Poiché viene specificato implicit_partition_columns, il tipo viene rilevato automaticamente come non-hive.

      Se i dati nel file di origine sono cifrati, decifrare i dati specificando l'opzione di formato encryption. Per ulteriori informazioni sulla decifrazione dei dati, vedere Decifra dati durante l'importazione dallo storage degli oggetti.

      Per ulteriori informazioni, vedere DBMS_CLOUD Opzioni formato pacchetto.

    In questo esempio, namespace-string è lo spazio di nomi dello storage degli oggetti Oracle Cloud Infrastructure e bucketname è il nome del bucket. Per ulteriori informazioni, vedere Informazioni sugli spazi di nomi dello storage degli oggetti.

    Per informazioni dettagliate sui parametri, vedere CREATE_EXTERNAL_TABLE Procedura.

    Per ulteriori informazioni sui servizi di storage degli oggetti cloud supportati, vedere DBMS_CLOUD Formati URI.

  3. È ora possibile eseguire le query nella tabella partizionata esterna creata nel passo precedente.

    Autonomous Database sfrutta le informazioni di partizionamento della tabella partizionata esterna, assicurandosi che la query acceda solo ai file di dati pertinenti nell'area di memorizzazione degli oggetti.

    Ad esempio:

    SELECT product, units FROM mysales WHERE year='2024'

    Questa istruzione SQL esegue una query sui dati nella partizione solo per l'anno 2024.