Federatieve query's uitvoeren in Oracle

Op deze pagina wordt beschreven hoe u Lakehouse Federation instelt voor het uitvoeren van federatieve query's op Oracle-gegevens die niet worden beheerd door Azure Databricks. Zie Verbinding maken met externe databases en catalogi voor meer informatie over Lakehouse Federation

Als u verbinding wilt maken met uw Oracle-database met behulp van Lakehouse Federation, moet u het volgende maken in uw Azure Databricks Unity Catalog-metastore (werkruimten die zijn gemaakt na 9 november 2023, zijn al automatisch een Unity Catalog-metastore ingericht):

  • Een verbinding met uw Oracle-database.
  • Een externe catalogus die uw Oracle-database in Unity Catalog weerspiegelt, zodat u de syntaxis van Unity Catalog-query's en hulpprogramma's voor gegevensbeheer kunt gebruiken om Azure Databricks-gebruikertoegang tot de database te beheren.

Requirements

Controleer voordat u begint of u voldoet aan de vereisten in deze sectie.

Vereisten voor Databricks

Vereisten voor werkruimte:

  • Werkruimte geactiveerd voor Unity Catalog. Werkruimten die na 9 november 2023 zijn gemaakt, zijn automatisch ingeschakeld voor Unity Catalog, inclusief automatische inrichting van metastores. U hoeft geen metastore handmatig te maken, tenzij uw werkruimte voorafgaat aan automatische activering en niet is ingeschakeld voor Unity Catalog. Zie Aan de slag met Unity Catalog.

Rekenvereisten:

  • Netwerkconnectiviteit van uw rekenresource naar de doeldatabasesystemen. Zie Netwerkaanbevelingen voor Lakehouse Federation.
  • Azure Databricks Compute moet gebruikmaken van Databricks Runtime 16.1 of hoger en de standaard - of toegewezen toegangsmodus.
  • SQL-warehouses moeten pro of serverloos zijn en moeten 2024.50 of hoger gebruiken.

Vereiste toestemmingen:

  • Als u een verbinding wilt maken, moet u een metastore-beheerder of een gebruiker zijn met de CREATE CONNECTION bevoegdheid voor de Unity Catalog-metastore die is gekoppeld aan de werkruimte. In werkruimten die automatisch zijn ingeschakeld voor Unity Catalog, hebben werkruimtebeheerders standaard de CREATE CONNECTION bevoegdheid.
  • Als u een buitenlandse catalogus wilt maken, moet u de machtiging CREATE CATALOG hebben voor de metastore en ofwel de eigenaar van de verbinding zijn of het privilege CREATE FOREIGN CATALOG voor de verbinding hebben. In werkruimten die automatisch zijn ingeschakeld voor Unity Catalog, hebben werkruimtebeheerders standaard de CREATE CATALOG bevoegdheid.

Aanvullende machtigingsvereisten worden opgegeven in elke sectie op basis van taken die volgt.

Oracle-vereisten

Voor verbindingen die systeemeigen netwerkversleuteling gebruiken, moet u NNE (ACCEPTED minimaal niveau) op de server inschakelen. Zie Het configureren van Network Data Encryption in de Oracle-documentatie. Dit geldt niet voor verbindingen die TLS gebruiken.

Een Azure Databricks-verbinding maken

Een verbinding geeft een pad en referenties op voor toegang tot een extern databasesysteem. Als u een verbinding wilt maken, kunt u Catalog Explorer of de CREATE CONNECTION SQL-opdracht gebruiken in een Azure Databricks-notebook of de Databricks SQL-queryeditor.

Note

U kunt ook de Databricks REST API of de Databricks CLI gebruiken om een verbinding te maken. Zie POST /api/2.1/unity-catalog/connections en Unity Catalog-opdrachten.

vereiste machtigingen: Metastore-beheerder of gebruiker met de CREATE CONNECTION-bevoegdheid.

Catalogusverkenner

  1. Klik in de Azure Databricks-werkruimte op het pictogram Gegevens.Catalogus.
  2. Klik op het pictogram Plug.Maak verbinding en klik vervolgens op Verbindingen.
  3. Klik op de knop Verbinding maken .
  4. Voer op de pagina Verbindingsbeginselen van de wizard Verbinding instellen een gebruiksvriendelijke verbindingsnaam in.
  5. Selecteer een verbindingstype van Oracle.
  6. (Optioneel) Voeg een opmerking toe.
  7. Klik op Volgende.
  8. Voer op de pagina Authentication het volgende in voor het Oracle-exemplaar:
    • Host: bijvoorbeeld oracle-demo.123456.rds.amazonaws.com
    • poort: bijvoorbeeld 1521
    • Gebruiker: bijvoorbeeld oracle_user
    • wachtwoord: bijvoorbeeld password123
    • Versleutelingsprotocol: Native Network Encryption (standaard) of Transport Layer Security
    • Door de gebruiker verstrekt servercertificaat: optioneel. Het PEM-gecodeerde publieke certificaat van je Oracle-instantie, gebruikt om de identiteit van de server te verifiëren tijdens de TLS-handshake. Geef het wanneer je server een certificaat presenteert van een privé- of interne certificaatautoriteit die niet in de standaard trustopslag staat. Een door de gebruiker verstrekt servercertificaat vereist het encryptieprotocolTransport Layer Security. Hostnaamverificatie wordt uitgevoerd als onderdeel van de TLS-handshake. De verbinding faalt als de hostnaam op het certificaat niet overeenkomt met de gevraagde hostnaam.
    • Tijdzone als regio: Optioneel. Standaard ingeschakeld. Bepaalt of de verbinding zijn sessietijdzone aan Oracle rapporteert als een benoemde regio (ingeschakeld) of als een vaste UTC-offset (uitgeschakeld). Schakel het alleen uit om de timezone region not found fout te omzeilen. Zie ORA-01882: tijdzoneregio niet gevonden.
  9. Klik op Verbinding maken.
  10. Voer op de basics catalogus pagina een naam in voor de buitenlandse catalogus. Een refererende catalogus spiegelt een database in een extern gegevenssysteem, zodat u de toegang tot gegevens in die database kunt opvragen en beheren met behulp van Azure Databricks en Unity Catalog.
  11. (Optioneel) Klik op Verbinding testen om te bevestigen dat deze werkt.
  12. Klik op Catalogus maken.
  13. Selecteer op de pagina Access de werkruimten waarin gebruikers toegang hebben tot de catalogus die u hebt gemaakt. U kunt Alle werkruimten hebben toegang of klik op Toewijzen aan werkruimten, de werkruimten selecteren en vervolgens op Toewijzen klikken.
  14. Wijzig de Eigenaar die de toegang tot alle objecten in de catalogus kan beheren. Begin met het typen van een principe in het tekstvak en klik vervolgens op het principe in de weergegeven resultaten.
  15. Verleent rechten aan de catalogus. Klik op Verlenen:
    1. Geef de Principals op die toegang hebben tot objecten in de catalogus. Begin met het typen van een principe in het tekstvak en klik vervolgens op het principe in de weergegeven resultaten.
    2. Selecteer de vooraf ingestelde Bevoegdheden om aan elke principal toe te kennen. Alle accountgebruikers krijgen standaard BROWSE toegekend.
      • Selecteer Gegevenslezer in de vervolgkeuzelijst om read bevoegdheden te verlenen voor objecten in de catalogus.
      • Selecteer Gegevenseditor in de vervolgkeuzelijst om read en modify bevoegdheden voor objecten in de catalogus toe te kennen.
      • Selecteer handmatig de bevoegdheden die u wilt verlenen.
    3. Klik op Toestaan.
  16. Klik op Volgende.
  17. Op de pagina Metagegevens, geef sleutel-waardeparen voor tags op. Zie Tags toepassen op beveiligbare objecten van Unity Catalogvoor meer informatie.
  18. (Optioneel) Voeg een opmerking toe.
  19. Klik op Opslaan.

SQL

Voer de volgende opdracht uit in een notebook of de Sql-queryeditor van Databricks:

CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>',
  encryption_protocol '<protocol>', -- optional
  timezone_as_region '<true-or-false>' -- optional
);

timezone_as_region controleert of de verbinding zijn sessietijdzone aan Oracle rapporteert als een benoemde regio zoals America/Los_Angeles (true, de standaard) of als een vaste UTC-offset zoals -08:00 (false). Stel het alleen in op false om de timezone region not found fout te omzeilen. Zie ORA-01882: tijdzoneregio niet gevonden.

Databricks raadt u aan Azure Databricks geheimen te gebruiken in plaats van tekenreeksen zonder opmaak voor gevoelige waarden, zoals referenties. Voorbeeld:

CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>'),
  encryption_protocol '<protocol>' -- optional
)

Om de identiteit van de server te verifiëren tijdens de TLS-handshake (bijvoorbeeld wanneer je Oracle-server een certificaat presenteert van een privé- of interne certificaatautoriteit die niet in de standaard trust store zit), geef je het PEM-gecodeerde certificaat van de server in de userProvidedServerCertificate optie. Een door de gebruiker verstrekt servercertificaat vereist dat encryption_protocol is ingesteld op TLS.

CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>'),
  encryption_protocol 'TLS',
  userProvidedServerCertificate '<pem-encoded-certificate>'
)

Als u tekenreeksen zonder opmaak moet gebruiken in SQL-opdrachten in notebooks, vermijd het afkappen van de tekenreeks door speciale tekens zoals $ te escapen met \. Bijvoorbeeld: \$.

Zie Geheimbeheervoor informatie over het instellen van geheimen.

Een buitenlandse catalogus maken

Note

Als u de gebruikersinterface gebruikt om een verbinding met de gegevensbron te maken, is de creatie van een vreemde catalogus inbegrepen en kunt u deze stap overslaan.

Een refererende catalogus spiegelt een database in een extern gegevenssysteem, zodat u de toegang tot gegevens in die database kunt opvragen en beheren met behulp van Azure Databricks en Unity Catalog. Om een buitenlandse catalogus te maken, gebruikt u een verbinding met de gegevensbron die al is gedefinieerd.

Als u een externe catalogus wilt maken, kunt u de Catalog Explorer of de CREATE FOREIGN CATALOG SQL-opdracht gebruiken in een Azure Databricks-notebook of in de SQL-queryeditor. U kunt ook de Databricks REST API of de Databricks CLI gebruiken om een catalogus te maken. Zie POST /api/2.1/unity-catalog/catalogs en Unity Catalog-opdrachten.

Vereiste machtigingen:CREATE CATALOG machtiging voor de metastore en eigendom van de verbinding of de CREATE FOREIGN CATALOG bevoegdheid op de verbinding.

Catalogusverkenner

  1. Klik in de Azure Databricks-werkruimte op het pictogram Gegevens.Catalogus om Catalog Explorer te openen.

  2. Klik boven aan het deelvenster Catalogus op het pictogram Toevoegen of pluspictogram Toevoegen en selecteer Een catalogus toevoegen in het menu.

    U kunt ook op de pagina Snelle toegang op de knop Catalogi klikken en vervolgens op de knop Catalogus maken klikken.

  3. Volg de instructies voor het maken van buitenlandse catalogi in Catalogi maken.

SQL

Voer de volgende SQL-opdracht uit in een notebook of SQL-queryeditor. Items tussen vierkante haakjes zijn optioneel. Vervang de waarden van de tijdelijke aanduidingen:

  • <catalog-name>: naam voor de catalogus in Azure Databricks.
  • <connection-name>: het verbindingsobject waarmee de gegevensbron, het pad en de toegangsreferenties worden opgegeven.
  • <service-name>: servicenaam dat u wilt spiegelen in een catalogus in Azure Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (service_name '<service-name>');

Ondersteunde pushdowns

De volgende tabel bevat de pushdownbewerkingen die worden ondersteund voor Oracle, samen met de rekenkracht die voor elke bewerking is vereist.

Pushdownautomaat Ondersteunde berekeningen
Aggregates Ondersteund Alle berekeningen
Rekenkundige operatoren
(zoals +, -, *, %, /) — niet ondersteund als ANSI is uitgeschakeld
Ondersteund Alle berekeningen
Booleaanse operatoren
(zoals =, <=>, <, <=, >, >=)
Ondersteund Alle berekeningen
Bevat, Begint met, Eindigt met Ondersteund Alle berekeningen
Filters Ondersteund Alle berekeningen
Limit Ondersteund Alle berekeningen
Wiskundige functies
(ABS, FLOOR — gedeeltelijke ondersteuning, alleen filterexpressies)
Ondersteund Alle berekeningen
Diverse functies
(zoals Alias, Cast, SortOrder — gedeeltelijke ondersteuning, alleen filterexpressies)
Ondersteund Alle berekeningen
Offset Ondersteund Alle berekeningen
Projections Ondersteund Alle berekeningen
Sorteren, bij gebruik met limiet Ondersteund Alle berekeningen
Stringfuncties
(UPPER, LOWER, CHAR_LENGTH, TRIM, RTRIM, LTRIM, CONCAT, RPAD, LPAD — gedeeltelijke ondersteuning, alleen filterexpressies)
Ondersteund Alle berekeningen
[Samenvoegingen] Ondersteund Databricks Runtime 17.2 en hoger en SQL Warehouse Compute. Deze pushdown bevindt zich in openbare preview; schakel de schakeloptie Join Pushdown in voor federatieve query's op de pagina Previews .
Vensterfuncties Niet ondersteund Niet ondersteund

Toewijzingen van gegevenstypen

Wanneer u gegevens leest van Oracle naar Spark, worden gegevenstypen als volgt toegewezen:

Oracle-type Sparktype
TIMESTAMP WITH TIMEZONE, TIMESTAMP WITH LOCAL TIMEZONE TimestampType
DATE, TIMESTAMP TimestampType/TimestampNTZType*
NUMBER, FLOAT DecimalType**
BINARY FLOAT FloatType
BINARY DOUBLE DoubleType
CHAR,NCHAR,VARCHAR2,NVARCHAR2 StringType

* DATE en TIMESTAMP worden toegewezen aan Spark TimestampType als spark.sql.timestampType = TIMESTAMP_LTZ (standaard). Ze worden toegewezen aan TimestampNTZType als spark.sql.timestampType = TIMESTAMP_NTZ.

** NUMBER zonder precisie op te geven wordt toegewezen aan DecimalType(38, 10) omdat Spark geen ondersteuning biedt voor een zuiver floating-point-decimaaltype.

Troubleshooting

ORA-01882: tijdzonegebied niet gevonden

Wanneer je verbinding maakt met Oracle-instanties 11.2.0.3.0 en later die geen tijdzonewaarde van Etc/UTChebben, kan de verbinding falen met de foutmelding ORA-01882: timezone region not found. Dit gebeurt wanneer de Oracle-server de genoemde tijdzoneregio die de verbinding bij het aanmelden rapporteert niet herkent.

Om deze fout op te lossen, raadt Databricks het volgende aan, in volgorde:

  1. Werk de tijdzonebestanden op de Oracle-server bij zodat deze de naam van de regio herkent. Dit is de permanente voorkeursoplossing. Zie Oracle-ondersteuning - ORA-01882.
  2. Als je de Oracle-server niet kunt updaten, zet dan de timezone_as_region verbindingsoptie op false. De verbinding rapporteert vervolgens een vaste UTC-offset in plaats van een regionaam, wat de fout vermijdt. Een vaste offset volgt geen seizoensgebonden tijdsveranderingen, dus TIMESTAMP WITH LOCAL TIME ZONE waarden worden niet aangepast voor zomertijd.

License

Het Oracle-stuurprogramma en andere benodigde Oracle-jars vallen onder de FDHUT-licentie zonder klikthrough.

Aanvullende bronnen