Externe Daten mit autonomer KI-Datenbank auf dedizierter Exadata-Infrastruktur abfragen
Beschreibt Packages und Tools zum Abfragen und Validieren der Daten mit Autonomous AI Database auf einer dedizierten Exadata-Infrastruktur.
Externe Daten werden nicht von der Datenbank verwaltet. Sie können jedoch DBMS_CLOUD-Prozeduren verwenden, um externe Daten abzufragen. Obwohl Abfragen für externe Daten nicht so schnell wie Abfragen für Datenbanktabellen sind, können Sie mit diesem Ansatz schnell Abfragen für externe Quelldateien und externe Daten ausführen.
Mit DBMS_CLOUD-Prozeduren können Sie die Daten in den externen Quelldateien für eine externe Tabelle validieren, sodass Sie Probleme erkennen und die Daten in der externen Tabelle korrigieren oder ungültige Daten ausschließen können, bevor Sie die Daten verwenden.
Hinweis: Wenn Sie den ADMIN-Benutzer nicht verwenden, vergewissern Sie sich, dass der Benutzer die erforderlichen Berechtigungen für die Vorgänge hat, die der Benutzer ausführen muss. Weitere Informationen finden Sie unter Datenbankbenutzerberechtigungen verwalten.
Externe Daten abfragen
Um Daten in Dateien in der Cloud abzufragen, müssen Sie zuerst Ihre Objektspeicherzugangsdaten in der autonomen KI-Datenbank speichern und dann eine externe Tabelle mit der PL/SQL-Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE erstellen.
Die Quelldatei in diesem Beispiel channels.txt enthält die folgenden Daten:
S,Direct Sales,Direct
T,Tele Sales,Direct
C,Catalog,Indirect
I,Internet,Indirect
P,Partners,Others
-
Speichern Sie die Zugangsdaten für den Cloud-Objektspeicher mit der Prozedur
DBMS_CREDENTIAL.CREATE_CREDENTIAL. Beispiel:BEGIN DBMS_CREDENTIAL.CREATE_CREDENTIAL( credential_name => 'DEF_CRED_NAME', username => 'adb_user@oracle.com', password => 'password' ); END; /Die Werte, die Sie für
usernameundpasswordangeben, hängen vom verwendeten Cloud-Objektspeicherservice ab:-
Oracle Cloud Infrastructure Object Storage:
usernameist Ihr Oracle Cloud Infrastructure-Benutzername undpasswordIhr Oracle Cloud Infrastructure-Authentifizierungstoken. Siehe Mit Authentifizierungstoken arbeiten. -
Oracle Cloud Infrastructure Object Storage Classic:
usernameist Ihr Oracle Cloud Infrastructure Classic-Benutzername undpasswordIhr Oracle Cloud Infrastructure Classic-Kennwort.
Dieser Vorgang speichert die Zugangsdaten in einem verschlüsselten Format in der Datenbank. Sie können einen beliebigen Namen als Zugangsdatenname verwenden. Beachten Sie, dass dieser Schritt nur einmal erforderlich ist, es sei denn, Ihre Objektspeicherzugangsdaten werden geändert. Nachdem Sie die Zugangsdaten gespeichert haben, können Sie denselben Zugangsdatennamen für alle Dataloads verwenden.
-
-
Erstellen Sie eine externe Tabelle auf der Basis der Quelldateien mit der Prozedur
DBMS_CLOUD.CREATE_EXTERNAL_TABLE.Die Prozedur
DBMS_CLOUD.CREATE_EXTERNAL_TABLEunterstützt externe Dateien in den unterstützten Cloud-Objektspeicherservices. Die Zugangsdaten stellen eine Eigenschaft auf Tabellenebene dar. Daher müssen sich die externen Dateien in demselben Objektspeicher befinden.Beispiel:
BEGIN DBMS_CLOUD.CREATE_EXTERNAL_TABLE( table_name =>'CHANNELS_EXT', credential_name =>'DEF_CRED_NAME', file_uri_list =>'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/idthydc0kinr/mybucket/channels.txt', format => json_object('delimiter' value ','), column_list => 'CHANNEL_ID NUMBER, CHANNEL_DESC VARCHAR2(20), CHANNEL_CLASS VARCHAR2(20)' ); END; /Parameter:
-
table_name: Der Name der externen Tabelle. -
credential_name: Der Name der Zugangsdaten, die im vorherigen Schritt erstellt wurden. -
file_uri_list: Eine durch Komma getrennte Liste der Quelldateien, die Sie abfragen möchten.In diesem Beispiel ist
file_uri_listeine Oracle Cloud Infrastructure-Swift-URI, die die Dateichannels.txtim Bucketmybucketin der Regionus-phoenix-1angibt. (idthydc0kinrist der Objektspeicher-Namespace, in dem sich der Bucket befindet.) Informationen zu den unterstützten URI-Formaten finden Sie unter URI-Formate für Cloud-Objektspeicher. -
format: Definiert die Optionen, die Sie zur Beschreibung des Formats der Quelldatei angeben können. Informationen zu den Formatoptionen, die Sie angeben können, finden Sie unter Formatparameter. -
column_list: Eine durch Komma getrennte Liste der Spaltendefinitionen in den Quelldateien.
Jetzt können Sie Abfragen für die externe Tabelle ausführen, die Sie im vorherigen Schritt erstellt haben. Beispiel:
SELECT count(*) FROM channels_ext;Standardmäßig erwartet die Datenbank, dass alle Zeilen in der externen Datendatei gültig sind und sowohl mit den Zieldatentypdefinitionen als auch mit der Formatdefinition der Datei(en) übereinstimmen. Wenn die Quelldateien Zeilen enthalten, die nicht mit den angegebenen Formatoptionen übereinstimmen, gibt die Abfrage einen Fehler aus. Sie können
format-Parameteroptionen wierejectlimitverwenden, um diese Fehler zu unterdrücken. Alternativ können Sie auch die erstellte externe Tabelle validieren, um die Fehlermeldungen und abgelehnten Zeilen anzuzeigen, damit Sie die Formatoptionen entsprechend ändern können. Weitere Informationen finden Sie unter Externe Daten validieren.Ausführliche Informationen zu den Parametern finden Sie unter CREATE_EXTERNAL_TABLE-Prozedur.
-
Metadatenspalten für externe Tabelle
Mit den Metadaten der externen Tabelle können Sie bestimmen, woher die Daten stammen, wenn Sie eine Abfrage ausführen.
Die externen Tabellen, die Sie mit DBMS_CLOUD.CREATE_EXTERNAL_TABLE, DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE oder DBMS_CLOUD.CREATE_HYBRID_PART_TABLE erstellen, enthalten zwei unsichtbare Spalten file$path und file$name. Mit diesen Spalten können Sie ermitteln, aus welcher Datei ein Datensatz stammt.
-
file$path: Gibt den Dateipfadtext bis zum Anfang des Objektnamens an. -
file$name: Gibt den Objektnamen an, einschließlich des gesamten Textes, der dem letzten "/" folgt.
Beispiel:
SELECT genre_id, name, file$name, file$path FROM ext_genre
WHERE rownum <= 2;
genre_id name file$name file$path
-------- --------- ----------- ----------------------
1 Action genre.csv https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre
2 Adventure genre.csv https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_gold/o/genre
Weitere Informationen zu unsichtbaren Spalten finden Sie unter Unsichtbare Spalten.
Externe Daten validieren
Zum Validieren einer externen Tabelle verwenden Sie die Prozedur DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE.
Bevor Sie eine externe Tabelle validieren, müssen Sie die externe Tabelle mit der Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TABLE erstellen. Validieren Sie sie dann mit der Prozedur DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE. Beispiel:
BEGIN
DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE (
table_name => 'CHANNELS_EXT' );
END;
/
Diese Prozedur scannt die Quelldateien und validiert sie mit den Formatoptionen, die beim Erstellen der externen Tabelle angegeben wurden.
Bei der Validierung werden standardmäßig alle Zeilen in den Quelldateien gescannt. Der Vorgang wird gestoppt, wenn eine Zeile abgelehnt wird. Wenn Sie nur eine Teilmenge der Zeilen validieren möchten, verwenden Sie den Parameter rowcount. Wenn der Parameter rowcount festgelegt ist, scannt der Validierungsvorgang Zeilen und stoppt, wenn eine Zeile abgelehnt wird oder wenn die angegebene Anzahl von Zeilen ohne Fehler validiert wurde.
Beispiel: Der folgende Validierungsvorgang scannt 100 Zeilen und stoppt, wenn eine Zeile abgelehnt wird oder wenn 100 Zeilen ohne Fehler validiert wurden:
BEGIN
DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE (
table_name => 'CHANNELS_EXT',
rowcount => 100 );
END;
/
Wenn die Validierung nicht gestoppt werden soll, wenn eine Zeile abgelehnt wird, und Sie alle abgelehnten Zeilen anzeigen möchten, setzen Sie den Parameter stop_on_error auf FALSE. In diesem Fall scannt VALIDATE_EXTERNAL_TABLE alle Zeilen und meldet alle abgelehnten Zeilen.
Wenn Sie nur eine Teilmenge der Zeilen validieren möchten, verwenden Sie den Parameter rowcount. Wenn rowcount festgelegt und stop_on_error auf FALSE gesetzt ist, scannt der Validierungsvorgang Zeilen und stoppt, wenn die angegebene Anzahl von Zeilen abgelehnt wird oder wenn die angegebene Anzahl von Zeilen ohne Fehler validiert wurde. Beispiel: Im folgenden Beispiel werden 100 Zeilen gescannt. Der Vorgang wird gestoppt, wenn 100 Zeilen abgelehnt oder 100 Zeilen ohne Fehler validiert wurden:
BEGIN
DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE (
table_name => 'CHANNELS_EXT',
rowcount => 100,
stop_on_error => FALSE );
END;
/
Ausführliche Informationen zu DBMS_CLOUD.VALIDATE_EXTERNAL_TABLE-Parametern finden Sie in VALIDATE_EXTERNAL_TABLE-Prozedur.
Informationen zu den Ergebnissen von Validierungsvorgängen in den Tabellen dba_load_operations und user_load_operations finden Sie unter Logs für Datenvalidierung anzeigen.
Logs für Datenvalidierung anzeigen
Nachdem Sie eine externe Tabelle validiert haben, können Sie das Ergebnis des Validierungsvorgangs anzeigen, indem Sie eine Tabelle mit Ladevorgängen abfragen:
-
dba_load_operations: Zeigt alle Validierungsvorgänge an. -
user_load_operations: Zeigt die Validierungsvorgänge in Ihrem Schema an.
Mit diesen Tabellen können Sie Informationen zur Ladevalidierung anzeigen. Beispiel: Verwenden Sie diese SELECT-Anweisung, um user_load_operations abzufragen:
SELECT table_name,owner_name,type,status,start_time,update_time,logfile_table,badfile_table
FROM user_load_operations
WHERE type = 'VALIDATE';
TABLE_NAME OWNER_NAME TYPE STATUS START_TIME UPDATE_TIME LOGFILE_TABLE BADFILE_TABLE
------------- ---------- ---------- ---------- -------------- ------------- --------------- ---------------
CHANNELS_EXT SH VALIDATE COMPLETED 13-NOV-17... 13-NOV-17... VALIDATE$21_LOG VALIDATE$21_BAD
Wenn Sie diese SQL-Anweisung mit der WHERE-Klausel in der Spalte TYPE verwenden, werden alle Ladevorgänge mit dem Typ VALIDATE angezeigt.
In der Spalte LOGFILE_TABLE wird der Name der Tabelle angezeigt, die Sie abfragen können, um das Log eines Validierungsvorgangs anzuzeigen. Beispiel: Die folgende Abfrage zeigt das Log für diesen Validierungsvorgang an:
SELECT * FROM VALIDATE$21_LOG;
Die Spalte BADFILE_TABLE zeigt den Namen der Tabelle an, die Sie abfragen können, um die Zeilen anzuzeigen, in denen Fehler bei der Validierung aufgetreten sind. Beispiel: Die folgende Abfrage zeigt die abgelehnten Datensätze für den oben genannten Validierungsvorgang an:
SELECT * FROM VALIDATE$21_BAD;
Je nach den im Log angezeigten Fehlern und den in BADFILE_TABLE angezeigten Zeilen können Sie den Fehler beheben, indem Sie die externe Tabelle mit dem Befehl DROP TABLE löschen und unter Angabe der korrekten Formatoptionen in DBMS_CLOUD.CREATE_EXTERNAL_TABLE neu erstellen.
Hinweis: Die Tabellen LOGFILE_TABLE und BADFILE_TABLE werden für jeden Validierungsvorgang zwei Tage gespeichert und dann automatisch entfernt.