Esegui query su tabelle Apache Iceberg
Autonomous Database supporta l'esecuzione di query sulle tabelle Apache Iceberg.
- Informazioni sull'esecuzione di query sulle tabelle di Apache Iceberg
Autonomous Database supporta l'esecuzione di query sulle tabelle di Apache Iceberg memorizzate in Amazon Web Services (AWS) o nello storage degli oggetti Oracle Cloud Infrastructure (OCI). - Concetti relativi all'esecuzione di query sulle tabelle di Apache Iceberg
Per eseguire query sulle tabelle di Apache Iceberg è utile comprendere i concetti riportati di seguito. - Esempi: esecuzione di query sulle tabelle di Apache Iceberg
Questi esempi mostrano come eseguire query sulle tabelle di Apache Iceberg su Amazon Web Services (AWS) e Oracle Cloud Infrastructure (OCI), utilizzando un Data Catalog e gli URL diretti per il file manifesto radice.
Argomento padre: eseguire query sui dati esterni con Autonomous Database
Informazioni sull'esecuzione di query sulle tabelle di Apache Iceberg
Autonomous Database supporta l'esecuzione di query sulle tabelle Apache Iceberg memorizzate in Amazon Web Services (AWS) o nello storage degli oggetti Oracle Cloud Infrastructure (OCI).
Configurazioni supportate
- Tavole Iceberg su AWS:
- Tabelle Iceberg registrate in AWS Glue Data Catalog, create con Spark o Athena.
Per ulteriori informazioni, vedere Utilizzare il connettore AWS Glue per leggere e scrivere le tabelle Apache Iceberg con transazioni ACID ed eseguire viaggi nel tempo e Utilizzo delle tabelle Iceberg.
- Tabelle Iceberg memorizzate su AWS S3 fornendo direttamente l'URL per il file di metadati radice.
- Tabelle Iceberg registrate in AWS Glue Data Catalog, create con Spark o Athena.
- Tabelle Iceberg su OCI:
- Tabelle Iceberg generate con OCI Data Flow utilizzando un catalogo Hadoop.
Per ulteriori informazioni, vedere Esempi di flusso di dati Oracle e Uso di un catalogo Hadoop.
- Tabelle Iceberg memorizzate nello storage degli oggetti OCI fornendo direttamente l'URL per il file di metadati radice.
- Tabelle Iceberg generate con OCI Data Flow utilizzando un catalogo Hadoop.
Limitazioni
- Tavole di Iceberg partizionate
Oracle non supporta le tabelle partizionate con Iceberg.
- Aggiornamenti a livello di riga delle tabelle Iceberg
Oracle non supporta l'unione in lettura per gli aggiornamenti delle tabelle Iceberg. Le query che riscontrano file eliminati nei metadati Iceberg non riusciranno. Per ulteriori informazioni sull'unione in lettura, vedere Enum RowLevelOperationMode.
- Evoluzione dello schema
Lo schema per le tabelle esterne Oracle è fisso e riflette la versione dello schema Iceberg al momento della creazione della tabella esterna. Le query non riescono se i metadati Iceberg puntano a una versione dello schema diversa rispetto a quella utilizzata per creare la tabella Iceberg. Se lo schema Iceberg cambia dopo la creazione della tabella esterna, si consiglia di ricreare la tabella esterna.
Argomento padre: Query sulle tabelle di Apache Iceberg
Concetti relativi all'esecuzione di query sulle tabelle di Apache Iceberg
La comprensione dei seguenti concetti è utile per eseguire query sulle tabelle Apache Iceberg.
Catalogo Iceberg
Il catalogo Iceberg è un servizio che gestisce i metadati delle tabelle, ad esempio gli snapshot delle tabelle, lo schema delle tabelle e le informazioni di partizionamento. Per eseguire una query sullo snapshot più recente per una tabella Iceberg, i motori di query devono prima accedere al catalogo e ottenere la posizione del file di metadati più recente. Sono già disponibili numerose implementazioni di cataloghi, tra cui AWS Glue, Hive, Nessie e Hadoop. Autonomous Database supporta il catalogo AWS Glue e l'implementazione HadoopCatalog utilizzata da Spark.
Per ulteriori informazioni, vedere Concorrenza ottimistica.
File di metadati
Il file di metadati è un documento JSON che tiene traccia degli snapshot di tabella, dello schema di partizionamento e delle informazioni sullo schema. Il file di metadati è il punto di accesso a una gerarchia di elenchi manifest e file manifest. I file manifesto tengono traccia dei file di dati della tabella insieme a informazioni quali il partizionamento e le statistiche delle colonne. Per ulteriori informazioni, vedere Specifica della tabella Iceberg.
Transazioni
Iceberg supporta gli aggiornamenti a livello di riga delle tabelle utilizzando la funzione di copia su scrittura o di unione sulla lettura. Copy-on-write genera nuovi file di dati che riflettono le righe aggiornate, mentre merge-on-read genera nuovi "delete files" che devono essere uniti ai file di dati durante la lettura. Oracle supporta la copia su scrittura. Le query sulle tabelle iceberg non riescono se vengono rilevati file di eliminazione. Per ulteriori informazioni, vedere RowLevelOperationMode.
Evoluzione degli schemi
Iceberg supporta l'evoluzione dello schema. Le modifiche allo schema si riflettono nei metadati Iceberg utilizzando un ID schema. Tenere presente che le tabelle esterne Oracle hanno uno schema fisso, determinato dalla versione dello schema più corrente al momento della creazione della tabella. Le query Iceberg non riescono quando i metadati sottoposti a query puntano a una versione dello schema diversa rispetto a quella utilizzata al momento della creazione della tabella. Per ulteriori informazioni, vedere Evoluzione dello schema.
Partitioning
Iceberg supporta opzioni di partizionamento avanzate come il partizionamento nascosto e l'evoluzione delle partizioni che si basano sull'elaborazione / modifica dei metadati della tabella senza costose modifiche al layout dei dati.
Argomento padre: Query sulle tabelle di Apache Iceberg
Esempi: esecuzione di query sulle tabelle di Apache Iceberg
Questi esempi mostrano come eseguire query sulle tabelle Apache Iceberg su Amazon Web Services (AWS) e Oracle Cloud Infrastructure (OCI), utilizzando un Data Catalog e gli URL diretti per il file manifesto radice.
Per informazioni dettagliate sulla creazione di tabelle esterne per Apache Iceberg, vedere CREATE_EXTERNAL_TABLE Procedura per Apache Iceberg.
Eseguire una query su una tabella Iceberg in AWS utilizzando Glue Data Catalog
In questo esempio viene eseguita una query sulla tabella Iceberg iceberg_parquet_time_dim
.
Descrizione dell'immagine example_1_table.png
La tabella appartiene al database Glue my-iceberg-db
ed è memorizzata nella cartella s3://my-iceberg-bucket/iceberg-loc
.
I dettagli della tabella per iceberg_parquet_time_dim
sono riportati di seguito.

Descrizione dell'immagine example_1_details_v1.png
È possibile creare una tabella esterna per iceberg_parquet_time_dim
come indicato di seguito.
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim',
credential_name => 'AWS_CRED',
file_uri_list => '',
format =>
'{"access_protocol":
{
"protocol_type": "iceberg",
"protocol_config":
{
"iceberg_catalog_type": "aws_glue",
"iceberg_glue_region": "us-west-1",
"iceberg_table_path": "my-iceberg-db.iceberg_parquet_time_dim"
}
}
}'
);
END;
/
Nella sezione protocol_config viene specificato che la tabella utilizza AWS Glue come tipo di catalogo e l'area del catalogo viene impostata su us-west-1
.
La credenziale AWS_CRED
viene creata utilizzando dbms_cloud.create_credential
con una chiave API AWS. L'istanza di Glue Data Catalog è determinata dall'ID account associato a AWS_CRED
per l'area us-west-1
, poiché esiste un'unica area di Glue Data Catalog per ogni account. L'elemento iceberg_table_path
nella sezione protocol_config
utilizza un percorso $database_name.$table_name
per specificare il nome della tabella Colla e il nome del database. Infine, i parametri column_list
e field_list
rimangono nulli perché lo schema della tabella viene derivato automaticamente dai metadati Iceberg.
Per ulteriori informazioni sulla creazione della credenziale, vedere CREATE_CREDENTIAL Procedura. Per informazioni sulle risorse AWS Glue, vedere Specifica degli ARN delle risorse AWS Glue.
Eseguire una query su una tabella Iceberg in AWS utilizzando la posizione del file di metadati radice
Se si conosce la posizione del file di metadati per una tabella Iceberg, è possibile creare una tabella esterna senza specificare un catalogo, come indicato di seguito.
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim',
credential_name => 'AWS_CRED',
file_uri_list => 'https://my-iceberg-bucket.s3.us-west-1.amazonaws.com/iceberg-loc/metadata/00004-1758ee2d-a204-4fd9-8d52-d17e5371a5ce.metadata.json',
format =>'{"access_protocol":{"protocol_type":"iceberg"}}');
END;
/
Il parametro file_uri_list
viene utilizzato per specificare la posizione del file di metadati in formato URL di tipo Virtual-Hosted AWS S3. Per informazioni su questo formato, vedere Metodi di accesso a un bucket S3 AWS.
In questo esempio, il database accede direttamente al file di metadati, pertanto non è necessario fornire una sezione protocol_config
nel parametro format
. Quando si utilizza la posizione del file di metadati per creare una tabella esterna, il database esegue una query sullo snapshot più recente a cui fa riferimento il file di metadati. Gli aggiornamenti successivi alla tabella Iceberg, che creano nuovi snapshot e nuovi file di metadati, non saranno visibili al database.
Eseguire una query su una tabella Iceberg che utilizza il catalogo Hadoop su OCI
In questo esempio viene eseguita una query sulla tabella Iceberg icebergTablePy
, creata utilizzando OCI Data Flow, in cui Spark utilizza l'implementazione HadoopCatalog per il catalogo Iceberg. HadoopCatalog utilizza una directory warehouse
e inserisce i metadati Iceberg in una sottocartella $database_name/$table_name
in questa directory. Viene inoltre utilizzato un file version-hint.text
contenente il numero di versione per la versione più recente del file di metadati. Per l'esempio su Github, vedere Supporto Iceberg su OCI Data Flow.
La tabella di esempio db.icebergTablePy
è stata creata utilizzando una cartella warehouse
, denominata iceberg
, nel bucket OCI my-iceberg-bucket
. Di seguito è riportato il layout di storage su OCI per la tabella icebergTablePy
.

Descrizione dell'immagine example_3_table_v1.png
Creare una tabella esterna per la tabella db.icebergTablePy
come indicato di seguito.
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim3',
credential_name => 'OCI_CRED',
file_uri_list => '',
format =>'{"access_protocol":{"protocol_type":"iceberg",
"protocol_config":{"iceberg_catalog_type": "hadoop",
"iceberg_warehouse":"https://objectstorage.uk-cardiff-1.oraclecloud.com/n/my-tenancy/b/my-iceberg-bucket/o/iceberg",
"iceberg_table_path": "db.icebergTablePy"}}}');
END;
/
Eseguire una query su una tabella Iceberg in OCI utilizzando la posizione del file di metadati radice
Possiamo eseguire una query sulla tabella Iceberg descritta nella sezione precedente utilizzando direttamente l'URL per il file di metadati, come segue:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'iceberg_parquet_time_dim4',
credential_name => 'OCI_CRED',
file_uri_list => 'https://objectstorage.uk-cardiff-1.oraclecloud.com/n/my-tenancy/b/my-iceberg-bucket/o/iceberg/db/icebergTablePy/metadata/v2.metadata.json',
format =>'{"access_protocol":{"protocol_type":"iceberg"}}'
);
END;
/
In questo esempio, viene utilizzato il parametro file_uri_list
per specificare l'URI per il file di metadati utilizzando il formato URI OCI nativo. Quando si utilizza l'URI del file di metadati, la tabella esterna esegue sempre una query sullo snapshot più recente memorizzato nel file specifico. Gli aggiornamenti successivi che generano nuovi snapshot e nuovi file di metadati non sono accessibili alla query.
Per ulteriori informazioni sul formato URI OCI nativo, vedere Formati URI di storage degli oggetti cloud.
Argomento padre: Query sulle tabelle di Apache Iceberg