Condividi tramite


Esercitazione: Eseguire query su Oracle dal cluster Big Data di SQL Server

Si applica a:SQL Server 2019 (15.x)

Important

I cluster Big Data di Microsoft SQL Server 2019 sono stati ritirati. Il supporto per i cluster Big Data di SQL Server 2019 è terminato a partire dal 28 febbraio 2025. Per altre informazioni, vedere il post di blog sull'annuncio e le opzioni per Big Data nella piattaforma Microsoft SQL Server.

Questa esercitazione illustra come eseguire query sui dati Oracle da un cluster Big Data di SQL Server 2019. Per eseguire questa esercitazione, sarà necessario avere accesso a un server Oracle. È necessario un account utente Oracle con privilegi di lettura per l'oggetto esterno. L'autenticazione utente di Oracle Proxy è supportata. Se non si ha accesso, questa esercitazione può dare un'idea del funzionamento della virtualizzazione dei dati per le origini dati esterne nel cluster Big Data di SQL Server.

In questa esercitazione si apprenderà come:

  • Crea una tabella esterna per i dati in un database Oracle esterno.
  • Unire questi dati con dati di valore elevato nell'istanza master.

Tip

Se si preferisce, è possibile scaricare ed eseguire uno script per i comandi di questa esercitazione. Per istruzioni, vedere gli esempi di virtualizzazione dei dati in GitHub.

Prerequisites

Creare una tabella Oracle

La procedura seguente consente di creare una tabella di esempio denominata INVENTORY in Oracle.

  1. Collegarsi a un'istanza e a un database Oracle che desideri utilizzare per questo tutorial.

  2. Eseguire l'istruzione seguente per creare la INVENTORY tabella:

     CREATE TABLE "INVENTORY"
     (
         "INV_DATE" NUMBER(10,0) NOT NULL,
         "INV_ITEM" NUMBER(10,0) NOT NULL,
         "INV_WAREHOUSE" NUMBER(10,0) NOT NULL,
         "INV_QUANTITY_ON_HAND" NUMBER(10,0)
     );
    
     CREATE INDEX INV_ITEM ON HR.INVENTORY(INV_ITEM);
    
  3. Importare il contenuto del file inventory.csv in questa tabella. Questo file è stato creato dagli script di creazione di esempio nella sezione Prerequisiti .

Creare un'origine dati esterna

Il primo passaggio consiste nel creare un'origine dati esterna in grado di accedere al server Oracle.

  1. In Azure Data Studio, collegarsi all'istanza master di SQL Server del cluster di Big Data. Per altre informazioni, vedere Connettersi all'istanza master di SQL Server.

  2. Fare doppio clic sulla connessione nella finestra Server per visualizzare il dashboard del server per l'istanza master di SQL Server. Selezionare Nuova query.

    Query dell'istanza master di SQL Server

  3. Eseguire il comando Transact-SQL seguente per modificare il contesto nel database Sales nell'istanza master.

    USE Sales
    GO
    
  4. Creare una credenziale con ambito database per connettersi al server Oracle. Specificare le credenziali appropriate per il server Oracle nell'istruzione seguente.

    CREATE DATABASE SCOPED CREDENTIAL [OracleCredential]
    WITH IDENTITY = '<oracle_user,nvarchar(100),SYSTEM>', SECRET = '<oracle_user_password,nvarchar(100),manager>';
    
  5. Creare un'origine dati esterna che punta al server Oracle.

    CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
    WITH (LOCATION = 'oracle://<oracle_server,nvarchar(100)>',CREDENTIAL = [OracleCredential]);
    

Facoltativo: autenticazione proxy Oracle

Oracle supporta l'autenticazione proxy per fornire un controllo di accesso granulare. Un utente proxy si connette al database Oracle usando le credenziali e rappresenta un altro utente nel database.

Un utente proxy può essere configurato in modo da avere accesso limitato rispetto all'utente rappresentato. Ad esempio, un utente proxy può essere autorizzato a connettersi usando un ruolo di database specifico dell'utente rappresentato. L'identità dell'utente che si connette al database Oracle tramite l'utente proxy viene mantenuta nella connessione, anche se più utenti si connettono usando l'autenticazione proxy. In questo modo Oracle può applicare il controllo di accesso e controllare le azioni eseguite per conto dell'utente effettivo.

Se lo scenario richiede l'utilizzo di un utente proxy Oracle, sostituire i passaggi precedenti 4 e 5 con quanto segue.

  1. Creare una credenziale con ambito database per connettersi al server Oracle. Specificare le credenziali utente del proxy Oracle appropriate per il server Oracle nell'istruzione seguente.

    CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
    WITH IDENTITY = '<oracle_proxy_user,nvarchar(100),SYSTEM>', SECRET = '<oracle_proxy_user_password,nvarchar(100),manager>';
    
  2. Creare un'origine dati esterna che punta al server Oracle.

    CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
    WITH (LOCATION = 'oracle://<oracle_server,nvarchar(100)>',
    CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
    CREDENTIAL = [OracleProxyCredential]);
    

Creare una tabella esterna

Creare quindi una tabella esterna denominata inventory_ora sulla INVENTORY tabella nel server Oracle.

CREATE EXTERNAL TABLE [inventory_ora]
    ([inv_date] DECIMAL(10,0) NOT NULL, [inv_item] DECIMAL(10,0) NOT NULL,
    [inv_warehouse] DECIMAL(10,0) NOT NULL, [inv_quantity_on_hand] DECIMAL(10,0))
WITH (DATA_SOURCE=[OracleSalesSrvr],
        LOCATION='<oracle_service_name,nvarchar(30),xe>.<oracle_schema,nvarchar(128),HR>.<oracle_table,nvarchar(128),INVENTORY>');

Note

I nomi delle tabelle e i nomi di colonna useranno l'identificatore tra virgolette SQL ANSI durante l'esecuzione di query su Oracle. Di conseguenza, i nomi fanno distinzione tra maiuscole e minuscole. È importante specificare il nome nella definizione della tabella esterna che corrisponde al caso esatto dei nomi di tabella e colonna nei metadati Oracle.

Eseguire una query sui dati

Eseguire la query seguente per unire i dati nella inventory_ora tabella esterna alle tabelle del database locale Sales.

SELECT TOP(100) w.w_warehouse_name, i.inv_item, SUM(i.inv_quantity_on_hand) as total_quantity
  FROM [inventory_ora] as i
  JOIN item as it
    ON it.i_item_sk = i.inv_item
  JOIN warehouse as w
    ON w.w_warehouse_sk = i.inv_warehouse
 WHERE it.i_category = 'Books' and i.inv_item BETWEEN 1 and 18000 --> get items within specific range
 GROUP BY w.w_warehouse_name, i.inv_item;

Clean up

Usare il comando seguente per rimuovere gli oggetti di database creati in questa esercitazione.

DROP EXTERNAL TABLE [inventory_ora];
DROP EXTERNAL DATA SOURCE [OracleSalesSrvr] ;
DROP DATABASE SCOPED CREDENTIAL [OracleCredential];

Next steps

Informazioni su come inserire dati nel pool di dati: