Metastore Data Catalog

Apache Hive è un framework di data warehousing che facilita le operazioni di lettura, scrittura o gestione su set di dati di grandi dimensioni che risiedono in sistemi distribuiti.

Data Catalog Metastore fornisce un repository centrale di metadati ad alta disponibilità e scalabile per un cluster Hive. Memorizza i metadati per le strutture di dati quali database, tabelle e partizioni in un database relazionale, supportato da file gestiti nello storage degli oggetti. Apache Spark SQL utilizza Data Catalog Metastore per questo scopo.

Le istanze del servizio OCI Data Flow, OCI Big Data Service e OCI Data Science accedono al metastore Data Catalog per memorizzare e recuperare in modo sicuro le definizioni degli schemi per gli oggetti negli asset dati non strutturati e semistrutturati, ad esempio lo storage degli oggetti.

Requisiti indispensabili

Prima di creare un metastore in Data Catalog, è necessario creare due bucket nello storage degli oggetti Oracle per contenere le tabelle gestite ed esterne.
  • Tabella gestita: il metastore gestisce l'oggetto tabella.
  • Tabella esterna: l'utente gestisce l'oggetto tabella.

Durante la creazione del metastore in Data Catalog, si forniscono gli URI dei bucket in cui risiedono le tabelle gestite ed esterne. Il formato dell'URI deve essere oci://<bucket_name>@<namespace_name>/<folder name of your choice>.

Nota

Si consiglia di non utilizzare la stessa posizione per le tabelle gestite ed esterne. Se entrambi i tipi di tabelle si trovano nella stessa directory, l'eliminazione dei dati dalle tabelle gestite potrebbe comportare la perdita di dati anche dalle tabelle esterne.

Per ulteriori informazioni, vedere connettore HDFS.

Criteri IAM necessari

È necessario aggiungere criteri per consentire al principal risorsa del metastore l'accesso alle posizioni di memorizzazione.

Come prerequisito, creare un gruppo dinamico che includa il metastore. Nelle seguenti istruzioni dei criteri, il relativo OCID è rappresentato da <dg-metastore-ocid>:
ALLOW dynamic-group <dg-metastore-ocid> to read buckets in tenancy where any {all {target.bucket.name='<managed-table-location-bucket>', request.region='<managed-table-location-bucket-region>'}, all {target.bucket.name='<external-table-location-bucket>', request.region='<external-table-location-bucket-region>'}}
ALLOW dynamic-group <dg-metastore-ocid> to manage objects in tenancy where all {target.bucket.name='<managed-table-location-bucket>', request.region='<managed-table-location-bucket-region>'}
ALLOW dynamic-group <dg-metastore-ocid> to read objects in tenancy where all {target.bucket.name='<external-table-location-bucket>', request.region='<external-table-location-bucket-region>'}
Nota

Per consentire a Metastore di creare in modo dinamico bucket per database utilizzando l'impostazione del parametro spark.conf oci.dcat.metastore.create.bucket.per.db = true, aggiungere i criteri riportati di seguito.
ALLOW dynamic-group <dg-metastore-ocid> to manage buckets in tenancy where any {all {target.bucket.name='<managed-table-location-bucket>', request.region='<managed-table-location-bucket-region>'}}
ALLOW dynamic-group <dg-metastore-ocid> to read buckets in tenancy where any {all {target.bucket.name='<external-table-location-bucket>', request.region='<external-table-location-bucket-region>'}}

Solo un Admin e gli utenti nel gruppo Administrators hanno accesso a tutte le risorse del metastore Data Catalog. In qualità di Admin, è possibile utilizzare i criteri riportati di seguito per fornire l'accesso a tutte le risorse del metastore.

allow <any-user> to manage data-catalog-metastore-assets in compartment <compartment-name>
allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name>

Questi criteri sono obbligatori, a meno che non vengano definiti criteri con filtro generico per le risorse a livello di catalogo, database o tabella. Per ulteriori informazioni, vedere Criteri IAM obbligatori per il controllo dell'accesso con filtro generico.

Controllo dell'accesso a grana grossa nel metastore di Data Catalog

Data Catalog Metastore fornisce un controllo dell'accesso con filtro avanzato utilizzando il servizio Identity and Access Management per evitare l'accesso e la modifica accidentali delle risorse create da un altro utente. L'amministratore può concedere l'accesso a risorse quali cataloghi, database e tabelle utilizzando i criteri predefiniti menzionati nella lista delle risorse nella pagina dei dettagli del metastore. Per ulteriori informazioni sulla visualizzazione delle risorse del metastore, vedere Visualizzazione della lista di risorse del metastore.
Nota

Per impostazione predefinita, il controllo dell'accesso con filtro generico è disabilitato, pertanto è necessario definire i criteri necessari per accedere a tutte le risorse del metastore. Vedere Criteri IAM obbligatori. Dopo aver definito questi criteri, impostare il parametro Spark.Conf su true. Per le soluzioni basate su Hive o HiveServer2, impostare oci.dcat.metastore.enable.cgac = true. Per le soluzioni basate su Spark o Spark, impostare spark.hadoop.oci.dcat.metastore.enable.cgac = true.

Criteri IAM necessari per il controllo dell'accesso con filtro approssimativo

Utilizzare i criteri riportati di seguito per fornire l'accesso alle risorse a livello di catalogo, database o tabella.

Nota

  • L'applicazione dei criteri a livello di database o di tabella richiede l'autorizzazione per gestire <hive-default>.
  • Quando i criteri vengono applicati a livello di database o di tabella, gli utenti del gruppo non possono visualizzare o elencare i database e le tabelle creati da un altro utente.

Consenti accesso a risorse a livello di catalogo:

  • Uso di target.metastore.catalog.name
    allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
  • Uso di target.metastore.catalog.key
    allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.key = '<metastore-catalog-key>'}
    Nota

    Il nome, la chiave e l'istruzione criterio di esempio sono disponibili nella pagina del metastore nella sezione Risorse.
    Quando si crea un criterio per un nuovo catalogo, è necessario creare anche un criterio per il database predefinito creato come parte di tale catalogo.
    allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
    allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = <metastore-catalog-name.default>}

Consentire a <specific-group> di accedere alle risorse a livello di database o di tabella per un catalogo specifico, in cui l'utente ha accesso alle risorse figlio di tale catalogo:

  • Uso di target.metastore.catalog.name
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = '<metastore-catalog-name.default>'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = '*'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.table.name = '*'}
  • Uso di target.metastore.catalog.key
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.key = '<catalog-ID>'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = <metastore-catalog-name.default>}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.key = '*'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.table.key = '*'}

Consentire a <specific-group> di accedere alle risorse a livello di database per un catalogo specifico applicando uno dei criteri riportati di seguito.

  • Uso di target.metastore.database.name
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = '<catalog-name>.<database-name>'}
  • Uso di target.metastore.database.key
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.key = '<metastore-database-ID>'}

Consentire a <specific-group> di accedere alle risorse a livello di tabella per un database specifico applicando uno dei criteri riportati di seguito.

  • Uso di target.metastore.table.name
    allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = '<catalog-name>.<database-name>'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.table.name = '<catalog-name>.<database-name>.<table-name>'}
  • Uso di target.metastore.table.key
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.table.key = '<metastore-table-ID>'}