Soporte de Avro, ORC y Parquet en DBMS_CLOUD
En esta sección se aborda el soporte de Avro, ORC y Parquet DBMS_CLOUD proporcionado con Autonomous AI Database.
Opciones de formato del paquete DBMS_CLOUD para Avro, ORC o Parquet
El argumento format en DBMS_CLOUD especifica el formato de los archivos de origen.
Las dos formas de especificar el argumento de formato son las siguientes:
format => '{"format_option" : "format_value" }'
y
format => json_object('format_option' value 'format_value')
Ejemplos:
format => json_object('type' VALUE 'CSV')
Para especificar varias opciones del formato, separe los valores con una ",".
Por ejemplo:
format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
| Opción de formato | Descripción | Sintaxis |
|---|---|---|
regexuri |
Cuando el valor de Los caracteres "*" y "?" se consideran caracteres comodín cuando el parámetro Los patrones de expresión regular solo están soportados para el nombre de archivo o la ruta de subcarpeta en los URI y la coincidencia de patrones es idéntica a la realizada por la función En el caso de las tablas externas, esta opción solo está soportada con las tablas que se crean en un archivo de Object Storage. Por ejemplo:
Consulte Condición REGEXP_LIKE en Referencia de lenguaje SQL de Oracle Database 19c o Referencia de lenguaje SQL de Oracle Database 26ai para obtener más información sobre la condición |
Valor por defecto: |
type |
Especifica el tipo del archivo. |
|
schema |
Cuando el esquema se define en Los nombres de columna coincidirán con los que se encuentran en Avro, ORC o Parquet. Los tipos de dato se convierten de tipos de dato Avro, ORC o Parquet a tipos de dato de Oracle. Todas las columnas se agregan a la tabla. El valor El valor Por defecto: si se especifica Nota: Para los archivos de formato Avro, ORC o Parquet, la opción de formato |
|
Asignación de tipo de datos de Avro a Oracle en el paquete DBMS_CLOUD
Describe la asignación de tipos de dato Avro a tipos de dato de Oracle.
Nota: Los tipos complejos, como mapas, matrices y estructuras, están soportados a partir de Oracle Database 19c. Consulte DBMS_CLOUD Package Avro, ORC, and Parquet Complex Types para obtener información sobre el uso de tipos de complejos Avro.
| Tipo de Avro | Type Oracle |
|---|---|
| INT | NUMBER(10) |
| LONG | NÚMERO(19) |
| Booleano | NÚMERO(1) |
| MATRIZ DE BYTES UTF8 | RAW(2000) |
| FLT | BINARY_FLOAT |
| DBL | BINARY_DOUBLE |
| DECIMAL(p) | NÚMERO(p) |
| DECIMAL(p,s) | NUMBER(p,s) |
| DATE | DATE |
| STRING | VARCHAR2 |
| TIME_MILLIS | VARCHAR2(20 BYTES) |
| TIME_MICROS | VARCHAR2(20 BYTES) |
| TIMESTAMP_MILLIS | TIMESTAMP(3) |
| TIMESTAMP_MICROS | TIMESTAMP(6) |
| ENUM | VARCHAR2(n) Donde: "n" es la longitud máxima real de los posibles valores de AVRO ENUM |
| DURATION | RAW(2000) |
| FIXED | RAW(2000) |
| NULL | VARCHAR2(1) BYTE |
Consulte DBMS_CLOUD Package Avro, ORC, and Parquet Complex Types para obtener información sobre el uso de tipos de complejos Avro.
Asignación de tipo de datos de ORC a Oracle en el paquete DBMS_CLOUD
Describe la asignación de tipos de dato ORC a tipos de dato Oracle.
Consulte DBMS_CLOUD Package Avro, ORC, and Parquet Complex Types para obtener información sobre el uso de tipos de complejos ORC.
| Tipo de ORC | Type Oracle | Más información |
|---|---|---|
| matriz | Formato JSON VARCHAR2(n) | Tipos complejos de Avro, ORC y Parquet del paquete DBMS_CLOUD |
| bigint (64 bits) | NÚMERO(19) | |
| binario | BLOB | |
| booleano (1 bit) | NÚMERO(1) | |
| carácter | CHAR(n) | |
| Fecha | DATE | |
| doble | BINARY_DOUBLE | |
| float | BINARY_FLOAT | |
| int (32 bits) | NUMBER(10) | |
| list | Formato JSON VARCHAR2(n) | Tipos complejos de Avro, ORC y Parquet del paquete DBMS_CLOUD |
| mapa | Formato JSON VARCHAR2(n) | Tipos complejos de Avro, ORC y Parquet del paquete DBMS_CLOUD |
| Smallint (16 bits) | NÚMERO(5) | |
| Cadena | VARCHAR2(4000) | |
| struct | Formato JSON VARCHAR2(n) | Tipos complejos de Avro, ORC y Parquet del paquete DBMS_CLOUD |
| registro de hora | TIMESTAMP | |
| diminuto (8 bits) | NÚMERO(3) | |
| union | Formato JSON VARCHAR2(n) | Tipos complejos de Avro, ORC y Parquet del paquete DBMS_CLOUD |
| varchar | VARCHAR2(n) |
Asignación de tipo de datos de Parquet a Oracle en el paquete DBMS_CLOUD
Describe la asignación de tipos de dato Parquet a tipos de dato de Oracle.
Nota: Los tipos complejos, como mapas, matrices y estructuras, están soportados a partir de Oracle Database 19c. Consulte DBMS_CLOUD Package Avro, ORC, and Parquet Complex Types para obtener información sobre el uso de tipos complejos de Parquet.
| Tipo de parquet | Type Oracle |
|---|---|
| UINT_64 | NÚMERO(20) |
| INT_64 | NÚMERO(19) |
| UINT_32 | NUMBER(10) |
| INT_32 | NUMBER(10) |
| UINT_16 | NÚMERO(5) |
| INT_16 | NÚMERO(5) |
| UINT_8 | NÚMERO(3) |
| INT_8 | NÚMERO(3) |
| Booleano | NÚMERO(1) |
| MATRIZ DE BYTES UTF8 | VARCHAR2(4000 BYTE) |
| FLT | BINARY_FLOAT |
| DBL | BINARY_DOUBLE |
| DECIMAL(p) | NÚMERO(p) |
| DECIMAL(p,s) | NUMBER(p,s) |
| DATE | DATE |
| STRING | VARCHAR2(4000) |
| TIME_MILLIS | VARCHAR2(20 BYTES) |
| HORA_MILLIS_UTC | VARCHAR2(20 BYTES) |
| TIME_MICROS | VARCHAR2(20 BYTES) |
| HORA_MICROS_UTC | VARCHAR2(20 BYTES) |
| TIMESTAMP_MILLIS | TIMESTAMP(3) |
| REGISTRO DE HORA_MILLIS_UTC | TIMESTAMP(3) |
| TIMESTAMP_MICROS | TIMESTAMP(6) |
| REGISTRO DE HORA_MICROS_UTC | TIMESTAMP(6) |
| NANOS_REGISTRO DE HORA | TIMESTAMP(9) |
Consulte DBMS_CLOUD Package Avro, ORC, and Parquet Complex Types para obtener información sobre el uso de tipos complejos de Parquet.
Asignación de tipo de dato de Oracle a Parquet de paquete DBMS_CLOUD
Describe la asignación de tipos de dato de Oracle a tipos de dato Parquet.
| Type Oracle | Tipo de parquet |
|---|---|
| BINARY_DOUBLE | DBL |
| BINARY_FLOAT | FLT |
| DATE | DATE |
| NUMBER(p,s) | DECIMAL(p,s) |
| NÚMERO(p) | DECIMAL(p) |
| TIMESTAMP(3) | TIMESTAMP_MILLIS |
| TIMESTAMP(3) | REGISTRO DE HORA_MILLIS_UTC |
| TIMESTAMP(6) | TIMESTAMP_MICROS |
| TIMESTAMP(6) | REGISTRO DE HORA_MICROS_UTC |
| TIMESTAMP(9) | NANOS_REGISTRO DE HORA |
| VARCHAR2(4000) | STRING |
Parámetros de Sesión NLS
Los parámetros de sesión de NLS NLS_DATE_FORMAT, NLS_TIMESTAMP_FORMAT, NLS_TIMESTAMP_TZ_FORMAT y NLS_NUMERIC_CHARACTERS definen cómo se deben mostrar la fecha, el registro de hora, el registro de hora con formato de zona horaria y el separador de radix para el registro de hora con marcador decimal cuando se consulta una tabla con esos tipos de columna.
Además, al exportar datos mediante DBMS_CLOUD.EXPORT_DATA y especificar la salida de Parquet, la base de datos de IA autónoma lee los valores de estos parámetros de la tabla NLS_SESSION_PARAMETERS. La base de datos de IA autónoma utiliza estos valores para convertir los tipos de dato de Oracle DATE o TIMESTAMP en tipos de Parquet.
Los parámetros NLS_SESSION_PARAMETERS soportan una máscara de formato RR (especificación de año de dos caracteres).
La máscara de formato RR para el año no está soportada para estos parámetros al exportar datos a Parquet con DBMS_CLOUD.EXPORT_DATA. Se emite un error de aplicación si intenta exportar a parquet y NLS_SESSION_PARAMETERS se define para utilizar la máscara de formato RR (el valor por defecto para el formato RR depende del valor del parámetro NLS_TERRITORY).
Cuando uno de los parámetros NLS_DATE_FORMAT, NLS_TIMESTAMP_FORMAT o NLS_TIMESTAMP_TZ_FORMAT utiliza la máscara de formato RR, debe cambiar el valor de formato al valor soportado para exportar datos a Parquet con DBMS_CLOUD.EXPORT_DATA. Por ejemplo:
ALTER SESSION SET NLS_DATE_FORMAT = "MM/DD/YYYY";
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH:MI:SS.FF';
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH:MI:SS.FF TZH:TZM';
Después de cambiar el valor, puede verificar el cambio consultando la vista NLS_SESSION_PARAMETERS:
SELECT value FROM NLS_SESSION_PARAMETERS
WHERE parameter IN ('NLS_DATE_FORMAT','NLS_TIMESTAMP_FORMAT','NLS_TIMESTAMP_TZ_FORMAT');
Si se define NLS_DATE_FORMAT, se aplica a las columnas con el tipo de dato DATE. Si se define NLS_TIMESTAMP_FORMAT, se aplica a las columnas con el tipo de dato TIMESTAMP. Si se define NLS_TIMESTAMP_TZ_FORMAT, se aplica a las columnas con el tipo de dato TIMESTAMP WITH TIME ZONE.
Consulte Parámetros de Fecha y Hora en Oracle Database 19c Database Globalization Support Guide o Oracle Database 26ai Database Globalization Support Guide y NLS Data Dictionary Views en Oracle Database 19c Database Globalization Support Guide o Oracle Database 26ai Database Globalization Support Guide para obtener más información.
Tipos complejos de Avro, ORC y Parquet del paquete DBMS_CLOUD
Describe la asignación de tipos de dato complejos de Avro, ORC y Parquet a tipos de dato de Oracle.
La base de datos de IA autónoma admite tipos de datos complejos, incluidos los siguientes tipos complejos:
- struct
- list
- mapa
- union
- matriz
Cuando especifica un tipo de archivo de origen de Avro, ORC o Parquet y el archivo de origen incluye columnas complejas, las consultas de Autonomous AI Database devuelven JSON para las columnas complejas. Esto simplifica el procesamiento de los resultados de las consultas; puede utilizar las potentes funciones de análisis de JSON de Oracle de forma coherente en los tipos de archivo y los tipos de dato. En la siguiente tabla se muestra el formato de los tipos complejos en la base de datos de IA autónoma:
Nota: Los campos complejos se asignan a las columnas VARCHAR2 y se aplican los límites de tamaño VARCHAR2.
| Tipo | Parquet | ORC | Avro | Oracle |
|---|---|---|---|---|
| Lista: secuencia de valores | List | List | Matriz | VARCHAR2 (formato JSON) |
| Mapa: lista de objetos con una sola clave | Asignación | Asignación | Asignación | VARCHAR2 (formato JSON) |
| Unión: valores de diferentes tipos | No Disponible | Unión | Unión | VARCHAR2 (formato JSON) |
| Objeto: cero o más pares clave-valor | Estruc | Estruc | Registro | VARCHAR2 (formato JSON) |
Si los archivos de origen ORC, Parquet o Avro contienen tipos complejos, puede consultar la salida de JSON para estos tipos complejos comunes. Por ejemplo, a continuación se muestra un archivo ORC, movie-info.orc, con un tipo complejo (se aplica el mismo manejo de tipo complejo para los archivos de origen Parquet y Avro).
Considere el archivo movie-info.orc con el siguiente esquema:
id int
original_title string
overview string
poster_path string
release_date string
vote_count int
runtime int
popularity double
genres array<struct<id:int,name:string>
Observe que cada película se clasifica por varios genres mediante una matriz de genres. La matriz genres es un array de structs y cada elemento tiene un id (int) y un name (string). La matriz genres se considera un tipo complejo. Puede crear una tabla a través de este archivo ORC mediante DBMS_CLOUD.CREATE_EXTERNAL_TABLE de la siguiente forma:
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
table_name =>'movie_info',
credential_name =>'OBJ_STORE_CRED',
file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/mytenancy/b/movies/o/movie-info.orc',
format => '{"type":"orc", "schema": "first"}');
END;
/
Al crear la tabla externa, la base de datos genera automáticamente las columnas basadas en el esquema del archivo ORC (si utiliza Avro o Parquet, se aplica lo mismo). Para este ejemplo, DBMS_CLOUD.CREATE_EXTERNAL_TABLE crea una tabla en la base de datos de la siguiente forma:
CREATE TABLE "ADMIN"."MOVIE_INFO"
( "ID"
NUMBER(10,0),
"ORIGINAL_TITLE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
"OVERVIEW" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
"POSTER_PATH" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
"RELEASE_DATE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
"VOTE_COUNT" NUMBER(10,0),
"RUNTIME" NUMBER(10,0),
"POPULARITY" BINARY_DOUBLE,
"GENRES" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP"
) DEFAULT COLLATION "USING_NLS_COMP"
ORGANIZATION EXTERNAL
( TYPE ORACLE_BIGDATA
DEFAULT DIRECTORY "DATA_PUMP_DIR"
ACCESS PARAMETERS
( com.oracle.bigdata.credential.name=OBJ_STORE_CRED
com.oracle.bigdata.fileformat=ORC
)
LOCATION
(
'https://objectstorage.us-phoenix-1.oraclecloud.com/n/mytenancy/b/movies/o/movie-info.orc'
)
)
REJECT LIMIT UNLIMITED
PARALLEL;
)
Ahora puede consultar los datos de la película:
SELECT original_title, release_date, genres
FROM movie_info
WHERE release_date > '2000'
ORDER BY original_title;
De este modo, se produce la siguiente salida:
original_title release_date genres
(500) Days of Summer 2009 [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},{"id":17,"name":"Horror"},{"id":19,"name":"Western"},{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
10,000 BC 2008 [{"id":6,"name":"Comedy"}]
11:14 2003 [{"id":9,"name":"Thriller"},{"id":14,"name":"Family"}]
127 Hours 2010 [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"}]
13 Going on 30 2004 [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
1408 2007 [{"id":45,"name":"Sci-Fi"},{"id":6,"name":"Comedy"},{"id":17,"name":"Horror"},{"id":6,"name":"Comedy"},{"id":18,"name":"War"}]
Observe que el tipo complejo genres se devuelve como una matriz de JSON.
Para que los datos JSON sean más útiles, puede transformar la columna mediante las funciones JSON de Oracle. Por ejemplo, puede utilizar la notación JSON ".", así como las funciones de transformación más potentes, como JSON_TABLE.
Consulte Simple Dot-Notation Access to JSON Data en Oracle Database 19c JSON Developer's Guide u Oracle Database 26ai JSON Developer's Guide para obtener información sobre la notación ".".
Consulte SQL/JSON Function JSON_TABLE en la Oracle Database 19c JSON Developer's Guide u Oracle Database 26ai JSON Developer's Guide para obtener información sobre JSON_TABLE.
El siguiente ejemplo muestra una consulta en la tabla que toma cada valor de la matriz y convierte el valor en una fila en el juego de resultados:
SELECT original_title, release_date, m.genre_name, genres
FROM movie_info mi,
JSON_TABLE(mi.genres, '$.name[*]'
COLUMNS (genre_name VARCHAR2(25) PATH
'$')
) AS m
WHERE rownum < 10;
JSON_TABLE crea una fila para cada valor de la matriz, piensa en la unión externa y la estructura se analiza para extraer el nombre del género. De esta forma, se produce la siguiente salida:
original_title release_date genre_name genres
(500) Days of Summer 2009 Drama [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 Comedy [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 Horror [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 Western [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 War [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 Romance [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
10,000 BC 2008 Comedy [{"id":6,"name":"Comedy"}]
11:14 2003 Family [{"id":9,"name":"Thriller"},{"id":14,"name":"Family"}]
11:14 2003 Thriller [{"id":9,"name":"Thriller"},{"id":14,"name":"Family"}]
127 Hours 2010 Comedy [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"}]
127 Hours 2010 Drama [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"}]
13 Going on 30 2004 Romance [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
13 Going on 30 2004 Comedy [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
13 Going on 30 2004 War [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
13 Going on 30 2004 Drama [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
Asignación de nombres de Avro, ORC y Parquet a la columna de Oracle en el paquete DBMS_CLOUD
Describe las reglas de conversión de los nombres de columna Avro, ORC y Parquet a nombres de columna de Oracle.
Los siguientes elementos están soportados para los nombres de columna Avro, ORC y Parquet, pero pueden requerir el uso de comillas dobles para las referencias de Oracle SQL en tablas externas. Por lo tanto, para facilitar el uso y evitar tener que utilizar comillas dobles al hacer referencia a los nombres de columna, si es posible, no utilice lo siguiente en los nombres de columna Avro, ORC y Parquet:
- Blancos incrustados
- Números iniciales
- Guiones bajos iniciales
- Palabras reservadas de Oracle SQL
En la siguiente tabla se muestran varios tipos de nombres de columna de Avro, ORC y Parquet, así como reglas para utilizar los nombres de columna en los nombres de columna de Oracle en tablas externas.
| Nombre de Avro, ORC o Parquet | Nombre de CREATE TABLE | CATÁLOGO DE Oracle | SQL válido | Notas: |
|---|---|---|---|---|
| pieza, pieza, o pieza | parte, parte, parte | PARTE |
|
Oracle utiliza de forma implícita nombres de columna sin comillas. |
| Nº de orden | "Nº de orden" | Nº de orden | select "Ord No" |
Las comillas dobles son necesarias cuando hay espacios en blanco incrustados, lo que también conserva las mayúsculas y minúsculas del carácter. |
| __index_key__ | "__index_key__" | __index_key__ | select "__index_key__" |
Las comillas dobles son necesarias cuando hay un guion bajo inicial, que también conserva las mayúsculas y minúsculas del carácter. |
| 6Vías | "En 6 sentidos" | 6Vías | select "6Way" |
Las comillas dobles son necesarias cuando hay un dígito numérico inicial, que también conserva las mayúsculas y minúsculas del carácter. |
| crear, crear o crear, etc. (cualquier variación de caso), partición, partición, función, etc. (para una palabra reservada de Oracle) | "CREAR" "PARTICIÓN" | CREAR PARTICIÓN |
|
Se necesitan comillas dobles para las palabras reservadas de Oracle SQL. Estos están forzados a mayúsculas, pero siempre deben estar entre comillas dobles cuando se utilizan en cualquier lugar de SQL. |
| ROWID, ROWID, ROWID, etc. (para ROWID, consulte las notas) | ID de fila |
|
Para ROWID, cualquier variación mixta o minúscula de ROWID conserva la caja y siempre debe estar entre comillas dobles y usar las variaciones originales de la caja. Debido al conflicto inherente con Oracle ROWID para la tabla, si especifica ROWID en mayúscula, se almacena automáticamente como "ROWID" en minúscula y siempre debe estar entre comillas dobles cuando se hace referencia a ella. |
Notas
-
En general, se puede hacer referencia a un nombre de columna en una tabla externa sin comillas dobles.
-
A menos que haya un espacio en blanco embebido, un guion bajo ("_") o un dígito numérico inicial ("0" a "9") en el nombre de la columna, se conservan las mayúsculas y minúsculas originales del nombre de la columna, y siempre se debe hacer referencia a ellas con comillas dobles y utilizando las mayúsculas y minúsculas originales (mayúsculas, minúsculas o mixtas) del nombre de la columna Avro, ORC o Parquet.
-
Después de utilizar
DBMS_CLOUD.CREATE_EXTERNAL_TABLEpara crear una tabla externa con el formato especificado comoavro,orcoparquet, utilice el comandoDESCRIBEen SQL*Plus para ver los nombres de columna de la tabla. -
Cuando se utilizan palabras reservadas de Oracle SQL en los nombres de columna Avro, ORC o Parquet, siempre se deben incluir comillas dobles cuando se hace referencia a ellas en cualquier lugar de SQL. Consulte Oracle SQL Reserved Words en Referencia de lenguaje SQL de Oracle Database 26ai o Referencia de lenguaje SQL de Oracle Database 26ai para más información.