Carga de datos de archivos en la nube
El paquete PL/SQL DBMS_CLOUD
proporciona soporte para cargar datos de archivos en la nube en tablas creadas en Autonomous Database on Dedicated Exadata Infrastructure.
DBMS_CLOUD
:
- Archivos de texto en la nube, con el procedimiento
DBMS_CLOUD.COPY_DATA
- Archivos JSON en la nube, con el procedimiento
DBMS_CLOUD.COPY_TEXT
- El archivo de origen está disponible como archivo local en la computadora cliente o que está cargado en un almacén de objetos basado en la nube, como Oracle Cloud Infrastructure Object Storage, y que el usuario de la base de datos que intenta cargar los datos puede acceder a él.
- Las credenciales de Cloud Object Storage se almacenan mediante el procedimiento
DBMS_CLOUD.CREATE_CREDENTIAL
. Consulte Creación de credenciales para obtener más información.
El paquete DBMS_CLOUD
admite la carga desde archivos en los siguientes servicios en la nube: Oracle Cloud Infrastructure Object Storage, Oracle Cloud Infrastructure Object Storage Classic, Azure Blob Storage y Amazon S3.
Temas relacionados
Creación de credenciales
Descubra cómo almacenar su credencial de Cloud Object Storage mediante el procedimiento DBMS_CLOUD.CREATE_CREDENTIAL
.
DBMS_CLOUD.CREATE_CREDENTIAL
mediante cualquier herramienta de base de datos como SQL*Plus, SQL Developer o Database Actions (herramienta de SQL Developer basada en web). Por ejemplo:BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL
(
credential_name => 'DEF_CRED_NAME',
username => 'adb_user@oracle.com',
password => 'password'
);
END;
/
Los valores que proporcione para username
y password
dependen del servicio de Cloud Object Storage que utilice:
-
Oracle Cloud Infrastructure Object Storage:
username
es el nombre de usuario de Oracle Cloud Infrastructure ypassword
es el token de autenticación de Oracle Cloud Infrastructure. Consulte Trabajar con token de autenticación. -
Oracle Cloud Infrastructure Object Storage Classic:
username
es el nombre de usuario de Oracle Cloud Infrastructure Classic ypassword
es la contraseña de Oracle Cloud Infrastructure Classic.
Esta operación almacena las credenciales en la base de datos en un formato cifrado. Puede utilizar cualquier nombre para el nombre de credencial. Tenga en cuenta que este paso solo es necesario una vez, a menos que cambien las credenciales del almacén de objetos. Una vez almacenadas las credenciales, puede utilizar el mismo nombre de credencial para todas las cargas de datos.
Carga de datos de archivos de texto
Descubra cómo cargar datos de archivos de texto en la nube en Autonomous Database mediante el procedimiento DBMS_CLOUD.COPY_DATA
.
El archivo de origen de este ejemplo, channels.txt
, tiene los siguientes datos:
S,Direct Sales,Direct T,Tele Sales,Direct C,Catalog,Indirect I,Internet,Indirect P,Partners,Others
Carga de un archivo JSON de documentos delimitados en una recopilación
Descubra cómo cargar un archivo JSON de documentos delimitados en una recopilación en Autonomous Database mediante el procedimiento DBMS_CLOUD.COPY_DATA
.
En este ejemplo, se cargan los valores JSON de un archivo delimitado por líneas y se utiliza el archivo JSON myCollection.json
. Cada valor, cada línea, se carga en una recopilación de la instancia de Autonomous Database como un único documento.
Este es un ejemplo de dicho archivo. Tiene tres líneas, con un objeto por línea. Cada uno de esos objetos se carga como un documento JSON independiente.
{ "name" : "apple", "count": 20 } { "name" : "orange", "count": 42 } { "name" : "pear", "count": 10 }
Carga de una matriz de documentos JSON en una recopilación
Descubra cómo cargar una matriz de documentos JSON en una recopilación en Autonomous Database mediante el procedimiento DBMS_CLOUD.COPY_COLLECTION
.
En este ejemplo se utiliza el archivo JSON fruit_array.json
. A continuación, se muestra el contenido del archivo fruit_array.json
:
[{"name" : "apple", "count": 20 }, {"name" : "orange", "count": 42 }, {"name" : "pear", "count": 10 }]
Copia de datos JSON en una tabla existente
Utilice DBMS_CLOUD.COPY_DATA
para cargar datos de JSON en la nube en una tabla.
El archivo de origen de este ejemplo es un archivo de datos de JSON.
Supervisión y solución de problemas de carga de datos
Todas las operaciones de carga de datos realizadas mediante el paquete PL/SQL
se registran en las tablas DBMS_CLOUD
dba_load_operations
y user_load_operations
:
-
dba_load_operations
: muestra todas las operaciones de carga. -
user_load_operations
: muestra las operaciones de carga del esquema.
Consulte estas tablas para ver información sobre las cargas de datos en curso y completadas. Por ejemplo, al utilizar una sentencia SELECT
con un predicado de cláusula WHERE
en la columna TYPE
, se muestran las operaciones de carga con el tipo COPY
:
SELECT table_name, owner_name, type, status, start_time, update_time, logfile_table, badfile_table
FROM user_load_operations WHERE type = 'COPY';
TABLE_NAME OWNER_NAME TYPE STATUS START_TIME UPDATE_TIME LOGFILE_TABLE BADFILE_TABLE
---------- ----------- ------- ---------- ---------------------- --------------------- --------------- ------------- ------------- -------------
CHANNELS SH COPY COMPLETED 04-MAR-21 07.38.30.522711000 AM GMT 04-MAR-21 07.38.30.522711000 AM GMT COPY$1_LOG COPY$1_BAD
La columna LOGFILE_TABLE
muestra el nombre de la tabla que puede consultar para ver el log de una operación de carga. Por ejemplo, la siguiente consulta muestra el log de la operación de carga:
select * from COPY$21_LOG;
La columna BADFILE_TABLE
muestra el nombre de la tabla que puede consultar para ver las filas que han obtenido errores durante la carga. Por ejemplo, la siguiente consulta muestra los registros rechazados para la operación de carga:
select * from COPY$21_BAD;
En función de los errores que se muestran en el log y las filas que se muestran en la tabla BADFILE_TABLE
especificada, puede corregir el error especificando las opciones de formato correctas en DBMS_CLOUD.COPY_DATA
.
Note:
Las tablasLOGFILE_TABLE
y BADFILE_TABLE
se almacenan durante dos días para cada operación de carga y, a continuación, se eliminan automáticamente.
Consulte Procedimiento DELETE_ALL_OPERATIONS para obtener información sobre cómo borrar la tabla user_load_operations
.
Objetos JSON textuales que representan valores escalares ampliados
Los datos JSON binarios nativos (formato OSON) amplían el lenguaje JSON agregando tipos escalares, como fecha, que se corresponden con tipos SQL y no forman parte del estándar JSON. Oracle Database also supports the use of textual JSON objects that represent JSON scalar values, including such nonstandard values.
Al crear datos JSON binarios nativos a partir de datos JSON textuales que contienen dichos objetos ampliados, se pueden sustituir opcionalmente con los valores escalares JSON correspondientes (binarios nativos).
Un ejemplo de un objeto ampliado es {"$numberDecimal":31}
. Representa un valor escalar JSON del tipo no estándar número decimal, y cuando se interpreta como tal se sustituye por un número decimal en formato binario nativo.
Por ejemplo, al utilizar el constructor de tipo de datos JSON, JSON
, si utiliza la palabra clave EXTENDED
, los objetos ampliados reconocidos en la entrada de texto se sustituyen por los valores escalares correspondientes en el resultado JSON binario nativo. Si no incluye la palabra clave EXTENDED
, no se produce dicha sustitución; los objetos JSON ampliados textuales simplemente se convierten tal cual en objetos JSON en el formato binario nativo.
En la dirección opuesta, al utilizar la función SQL de Oracle json_serialize
para serializar datos JSON binarios como datos JSON textuales (VARCHAR2
, CLOB
o BLOB
), puede utilizar la palabra clave EXTENDED
para sustituir (binario nativo) los valores escalares JSON por los objetos JSON textuales ampliados correspondientes.
Note:
Si la base de datos que utiliza es Oracle Autonomous Database, puede utilizar el procedimiento PL/SQL DBMS_CLOUD.copy_collection
para crear una recopilación de documentos JSON a partir de un archivo de datos JSON como el producido por bases de datos NoSQL comunes, incluida Oracle NoSQL Database.
Si utiliza ejson
como valor del parámetro type
del procedimiento, los objetos JSON ampliados reconocidos en el archivo de entrada se sustituyen por los valores escalares correspondientes en la recopilación JSON binaria nativa resultante. En la otra dirección, puede utilizar la función json_serialize
con la palabra clave EXTENDED
para sustituir los valores escalares por objetos JSON ampliados en los datos JSON resultantes.
Estos son los dos casos de uso principales para objetos ampliados:
-
Exchange (importación/exportación):
-
Ingesta de datos JSON existentes (desde algún lugar) que contengan objetos ampliados.
-
Serialización de datos JSON binarios nativos como datos JSON textuales con objetos ampliados, para algunos usos fuera de la base de datos.
-
-
Inspección de datos JSON binarios nativos: vea lo que tiene mirando los objetos ampliados correspondientes.
Para el intercambio, puede realizar la ingesta de datos JSON de un archivo producido por bases de datos NoSQL comunes, incluida Oracle NoSQL Database, mediante la conversión de objetos ampliados en escalares JSON binarios nativos. En la otra dirección, puede exportar datos JSON binarios nativos como datos textuales, sustituyendo los valores JSON escalares específicos de Oracle por los objetos JSON ampliados textuales correspondientes.
Sugerencia:
Como ejemplo de inspección, considere un objeto como {"dob" : "2000-01-02T00:00:00"}
como resultado de la serialización de datos JSON nativos. ¿Es "2000-01-02T00:00:00"
el resultado de serializar un valor binario nativo de tipo fecha o es el valor binario nativo solo una cadena? El uso de json_serialize
con la palabra clave EXTENDED
le permite saberlo.
La asignación de campos de objetos ampliados a tipos JSON escalares es, en general, varios a uno: se puede asignar más de un tipo de objeto JSON ampliado a un valor escalar determinado. Por ejemplo, los objetos JSON ampliados {"$numberDecimal":"31"}
y {"$numberLong:"31"}
se convierten como el valor 31 del número de tipo escalar de lenguaje JSON y el método de elemento type()
devuelve "number"
para cada uno de esos escalars JSON.
El método de elemento type()
informa del tipo escalar de idioma JSON de su valor objetivo (como una cadena JSON). Algunos valores escalares se pueden distinguir internamente, incluso cuando tienen el mismo tipo escalar. Esto generalmente permite que la función json_serialize
(con la palabra clave EXTENDED
) reconstruya el objeto JSON ampliado original. Estos valores escalares se distinguen internamente, ya sea mediante el uso de diferentes tipos SQL para implantarlos o mediante el etiquetado con el tipo de objeto JSON ampliado del que se derivaron.
Cuando json_serialize
reconstruye el objeto JSON ampliado original, el resultado no siempre es texto idéntico al original, pero siempre es semánticamente equivalente. Por ejemplo, {"$numberDecimal":"31"}
y {"$numberDecimal":31}
son semánticamente equivalentes, aunque los valores de campo difieran en el tipo (cadena y número). Se convierten al mismo valor interno y cada uno se etiqueta como derivado de un objeto ampliado $numberDecimal
(misma etiqueta). Sin embargo, cuando se serializa, el resultado para ambos es {"$numberDecimal":31}
. Oracle siempre utiliza el tipo más directamente relevante para el valor de campo, que en este caso es el valor de lenguaje JSON 31
, del número de tipo escalar.
En la Tabla se presentan las correspondencias entre los distintos tipos utilizados. Asigna entre (1) tipos de objetos ampliados utilizados como entrada, (2) tipos informados por el método de elemento type()
, (3) tipos SQL utilizados internamente, (4) tipos de lenguaje JSON estándar utilizados como salida por la función json_serialize
y (5) tipos de salida de objetos ampliados por json_serialize
cuando se especifica la palabra clave EXTENDED
.
Tabla - Relaciones de tipo de objeto JSON ampliado
Tipo de objeto ampliado (entrada) | Tipo escalar de Oracle JSON (notificado por type()) | Tipo escalar SQL | Tipo escalar JSON estándar (salida) | Tipo de objeto ampliado (salida) |
---|---|---|---|---|
$numberDouble con un valor de número JSON, cadena que representa el número o una de estas cadenas: "Infinity" , "-Infinity" , "Inf" , "-Inf" , "Nan" Nota al pie 1
|
doble | BINARY_DOUBLE |
number |
$numberDouble con un valor de número JSON o una de estas cadenas: "Inf" , "-Inf" , "Nan" Nota al pie 2 |
$numberFloat con el mismo valor que para $numberDouble |
float | BINARY_FLOAT |
number |
$numberFloat con el mismo valor que para $numberDouble |
$numberDecimal con el mismo valor que para $numberDouble |
number | NUMBER |
number |
$numberDecimal con el mismo valor que para $numberDouble |
$numberInt con un valor de entero firmado de 32 bits o una cadena que representa el número
|
number | NUMBER |
number |
$numberInt con el mismo valor que para $numberDouble |
$numberLong con un valor de número JSON o una cadena que representa el número
|
number | NUMBER |
number |
$numberLong con el mismo valor que para $numberDouble |
Cuando el valor es una cadena de caracteres en base 64, el objeto ampliado también puede tener el campo |
binarios | BLOB o RAW |
Cadena La conversión es equivalente al uso de la función SQL |
Una de las siguientes:
|
$oid con un valor de cadena de 24 caracteres hexadecimales
|
binarios | RAW(12) |
Cadena La conversión es equivalente al uso de la función SQL |
$rawid con un valor de cadena de 24 caracteres hexadecimales
|
$rawhex con un valor de cadena con un número par de caracteres hexadecimales
|
binarios | RAW |
Cadena La conversión es equivalente al uso de la función SQL |
$binary con un valor de cadena de caracteres en base 64, relleno a la derecha con caracteres =
|
$rawid con un valor de cadena de 24 o 32 caracteres hexadecimales
|
binarios | RAW |
Cadena La conversión es equivalente al uso de la función SQL |
$rawid |
$oracleDate con valor de una cadena de fecha ISO 8601
|
Fecha | DATE |
Cadena |
$oracleDate con valor de una cadena de fecha ISO 8601
|
$oracleTimestamp con valor de una cadena de registro de hora 8601ISO 8601 ISO
|
registro de hora | TIMESTAMP |
Cadena |
$oracleTimestamp con valor de una cadena de registro de hora 8601ISO 8601 ISO
|
$oracleTimestampTZ con un valor de una cadena de registro de hora ISO 8601 con un desfase numérico de zona horaria o con Z |
registro de hora con zona horaria | TIMESTAMP WITH TIME ZONE |
Cadena |
$oracleTimestampTZ con un valor de una cadena de registro de hora ISO 8601 con un desfase numérico de zona horaria o con Z |
|
registro de hora con zona horaria | TIMESTAMP WITH TIME ZONE |
Cadena |
$oracleTimestampTZ con un valor de una cadena de registro de hora ISO 8601 con un desfase numérico de zona horaria o con Z |
$intervalDaySecond con valor de una cadena de intervalo ISO 8601 como se especifica para la función SQL to_dsinterval |
daysecondInterval | INTERVAL DAY TO SECOND |
Cadena |
$intervalDaySecond con valor de una cadena de intervalo ISO 8601 como se especifica para la función SQL to_dsinterval |
$intervalYearMonth con valor de una cadena de intervalo ISO 8601 como se especifica para la función SQL to_yminterval |
yearmonthInterval | INTERVAL YEAR TO MONTH |
Cadena |
$intervalYearMonth con valor de una cadena de intervalo ISO 8601 como se especifica para la función SQL to_yminterval |
Dos campos:
|
vector | VECTOR |
matriz de números |
Dos campos:
|
Nota de pie de página 1 Los valores de cadena se interpretan de forma no sensorial. Por ejemplo, "NAN"
"nan"
y "nAn"
se aceptan y equivalentes, y de forma similar, "INF"
, "inFinity"
y "iNf"
. Los números infinitamente grandes ("Infinity"
o "Inf"
) y pequeños ("-Infinity"
o "-Inf"
) se aceptan con la palabra completa o la abreviatura.
Nota al pie 2 En la salida, solo se utilizan estos valores de cadena: ningún valor Infinity de palabra completa ni variantes de mayúsculas.
Consulte también: