DBMS_CLOUD - Suporte a Avro, ORC e Parquet
Esta seção aborda o suporte Avro, ORC e Parquet DBMS_CLOUD fornecido com o Autonomous AI Database.
Opções de Formato de Pacote DBMS_CLOUD para Avro, ORC ou Parquet
O argumento de formato em DBMS_CLOUD especifica o formato dos arquivos de origem.
As duas maneiras de especificar o argumento de formatação são:
format => '{"format_option" : "format_value" }'
e
format => json_object('format_option' value 'format_value')
Exemplos de:
format => json_object('type' VALUE 'CSV')
Para especificar várias opções de formato, separe os valores com um ",".
Por exemplo:
format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
| Opção de Formato | Descrição | Sintaxe |
|---|---|---|
regexuri |
Quando o valor de Os caracteres "*" e "?" são considerados caracteres curinga quando o parâmetro Só há suporte para padrões de expressão regular no nome do arquivo ou no caminho da subpasta em seus URIs, e a correspondência de padrões é idêntica à executada pela função Para tabelas externas, essa opção só é suportada com as tabelas criadas em um arquivo no Object Storage. Por exemplo:
Consulte Condição REGEXP_LIKE em Referência de Linguagem SQL do Oracle Database 19c ou Referência de Linguagem SQL do Oracle Database 26ai para obter mais informações sobre a condição |
Valor padrão: |
type |
Especifica o tipo de arquivo. |
|
schema |
Quando o esquema é definido como Os nomes das colunas corresponderão aos encontrados em Avro, ORC ou Parquet. Os tipos de dados são convertidos de tipos de dados Avro, ORC ou Parquet em tipos de dados Oracle. Todas as colunas são adicionadas à tabela. O valor O valor Padrão: Se Observação: para arquivos de formato Avro, ORC ou Parquet, a opção de formato |
|
DBMS_CLOUD - Mapeamento do Tipo de Dados Pacote Avro para Oracle
Descreve o mapeamento de tipos de dados Avro para tipos de dados Oracle.
Observação: Tipos complexos, como mapas, matrizes e estruturas, são suportados a partir do Oracle Database 19c. Consulte DBMS_CLOUD Pacote Avro, ORC e Tipos Complexos Parquet para obter informações sobre como usar tipos complexos Avro.
| Tipo Avro | Tipo Oracle |
|---|---|
| INT | NUMBER(10) |
| LONG | NÚMERO(19) |
| LOJA | NÚMERO(1) |
| UTF8 BYTE_ARRAY | 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) Onde: "n" é o comprimento máximo real dos valores possíveis do AVRO ENUM |
| DURATION | RAW(2000) |
| FIXED | RAW(2000) |
| NULL | VARCHAR2(1) BYTE |
Consulte DBMS_CLOUD Pacote Avro, ORC e Tipos Complexos Parquet para obter informações sobre como usar tipos complexos Avro.
DBMS_CLOUD - Mapeamento do Tipo de Dados Pacote ORC para Oracle
Descreve o mapeamento de tipos de dados ORC para tipos de dados Oracle.
Consulte DBMS_CLOUD Package Avro, ORC, and Parquet Complex Types para obter informações sobre o uso de tipos complexos ORC.
| Tipo de ORC | Tipo Oracle | Mais informações |
|---|---|---|
| array | Formato JSON do VARCHAR2(n) | DBMS_CLOUD - Tipos Complexos de Pacote Avro, ORC e Parquet |
| bigint (64 bits) | NÚMERO(19) | |
| binário | BLOB | |
| boolean (1 bit) | NÚMERO(1) | |
| caractere | CAR(n) | |
| data | DATE | |
| duplo | BINARY_DOUBLE | |
| flutuante | BINARY_FLOAT | |
| int (32 bits) | NUMBER(10) | |
| list | Formato JSON do VARCHAR2(n) | DBMS_CLOUD - Tipos Complexos de Pacote Avro, ORC e Parquet |
| map | Formato JSON do VARCHAR2(n) | DBMS_CLOUD - Tipos Complexos de Pacote Avro, ORC e Parquet |
| smallint (16 bits) | NÚMERO(5) | |
| string | VARCHAR2(4000) | |
| struct | Formato JSON do VARCHAR2(n) | DBMS_CLOUD - Tipos Complexos de Pacote Avro, ORC e Parquet |
| timestamp | TIMESTAMP | |
| smallint (8 bits) | NÚMERO(3) | |
| união | Formato JSON do VARCHAR2(n) | DBMS_CLOUD - Tipos Complexos de Pacote Avro, ORC e Parquet |
| varchar | VARCHAR2(n) |
DBMS_CLOUD - Mapeamento do Tipo de Dados Pacote Parquet para Oracle
Descreve o mapeamento de tipos de dados Parquet para tipos de dados Oracle.
Observação: Tipos complexos, como mapas, matrizes e estruturas, são suportados a partir do Oracle Database 19c. Consulte DBMS_CLOUD Pacote Avro, ORC e Tipos Complexos Parquet para obter informações sobre como usar tipos complexos Parquet.
| Tipo de Parquet | Tipo 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) |
| LOJA | NÚMERO(1) |
| UTF8 BYTE_ARRAY | 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) |
| TIME_MILLIS_UTC | VARCHAR2(20 BYTES) |
| TIME_MICROS | VARCHAR2(20 BYTES) |
| TIME_MICROS_UTC | VARCHAR2(20 BYTES) |
| TIMESTAMP_MILLIS | TIMESTAMP(3) |
| TIMESTAMP_MILLIS_UTC | TIMESTAMP(3) |
| TIMESTAMP_MICROS | TIMESTAMP(6) |
| TIMESTAMP_MICROS_UTC | TIMESTAMP(6) |
| TIMESTAMP_NANOS | TIMESTAMP(9) |
Consulte DBMS_CLOUD Pacote Avro, ORC e Tipos Complexos de Parquet para obter informações sobre como usar tipos complexos de Parquet.
DBMS_CLOUD - Mapeamento de Tipo de Dados Oracle para Parquet do Pacote
Descreve o mapeamento de tipos de dados Oracle para tipos de dados Parquet.
| Tipo 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) | TIMESTAMP_MILLIS_UTC |
| TIMESTAMP(6) | TIMESTAMP_MICROS |
| TIMESTAMP(6) | TIMESTAMP_MICROS_UTC |
| TIMESTAMP(9) | TIMESTAMP_NANOS |
| VARCHAR2(4000) | STRING |
Parâmetros da Sessão NLS
Os parâmetros de sessão NLS NLS_DATE_FORMAT, NLS_TIMESTAMP_FORMAT, NLS_TIMESTAMP_TZ_FORMAT e NLS_NUMERIC_CHARACTERS definem como a data, o timestamp, o timestamp com formato de fuso horário e o separador de radix para timestamp com marcador decimal devem ser mostrados quando uma tabela com esses tipos de coluna é consultada.
Além disso, quando você exporta dados usando DBMS_CLOUD.EXPORT_DATA e especifica a saída de Parquet, o Autonomous AI Database lê os valores desses parâmetros na tabela NLS_SESSION_PARAMETERS. O Autonomous AI Database usa esses valores para converter os tipos de dados DATE ou TIMESTAMP da Oracle em tipos de Parquet.
Os parâmetros NLS_SESSION_PARAMETERS suportam uma máscara de formato RR (especificação de ano com dois caracteres).
A máscara de formato RR para o ano não é suportada para esses parâmetros quando você exporta dados para Parquet com DBMS_CLOUD.EXPORT_DATA. Um erro de aplicativo será gerado se você tentar exportar para parquet e o NLS_SESSION_PARAMETERS estiver definido para usar a máscara de formato RR (o valor padrão para o formato RR depende do valor do parâmetro NLS_TERRITORY).
Quando um dos parâmetros NLS_DATE_FORMAT, NLS_TIMESTAMP_FORMAT ou NLS_TIMESTAMP_TZ_FORMAT usa a máscara de formato RR, você deve alterar o valor do formato para o valor suportado para exportar dados para Parquet com DBMS_CLOUD.EXPORT_DATA. Por exemplo:
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';
Depois de alterar o valor, você poderá verificar a alteração consultando a view NLS_SESSION_PARAMETERS:
SELECT value FROM NLS_SESSION_PARAMETERS
WHERE parameter IN ('NLS_DATE_FORMAT','NLS_TIMESTAMP_FORMAT','NLS_TIMESTAMP_TZ_FORMAT');
Se NLS_DATE_FORMAT for definido, ele se aplicará às colunas com o tipo de dados DATE. Se NLS_TIMESTAMP_FORMAT for definido, ele se aplicará às colunas com o tipo de dados TIMESTAMP. Se NLS_TIMESTAMP_TZ_FORMAT for definido, ele se aplicará às colunas com o tipo de dados TIMESTAMP WITH TIME ZONE.
Consulte Date and Time Parameters em Oracle Database 19c Database Globalization Support Guide ou Oracle Database 26ai Database Globalization Support Guide e NLS Data Dictionary Views no Oracle Database 19c Database Globalization Support Guide ou Oracle Database 26ai Database Globalization Support Guide para obter mais informações.
DBMS_CLOUD - Tipos Complexos de Pacote Avro, ORC e Parquet
Descreve o mapeamento de tipos de dados complexos Avro, ORC e Parquet para tipos de dados Oracle.
O Autonomous AI Database suporta tipos de dados complexos, incluindo os seguintes tipos complexos:
- struct
- list
- map
- união
- array
Quando você especifica um tipo de arquivo de origem Avro, ORC ou Parquet e o arquivo de origem inclui colunas complexas, as consultas do Autonomous AI Database retornam JSON para as colunas complexas. Isso simplifica o processamento dos resultados da consulta; você pode usar os poderosos recursos de análise JSON da Oracle de forma consistente entre os tipos de arquivo e os tipos de dados. A tabela a seguir mostra o formato dos tipos complexos no Autonomous AI Database:
Observação: Os campos complexos são mapeados para colunas VARCHAR2 e os limites de tamanho VARCHAR2 se aplicam.
| Tipo | Parquet | ORC | Avro | Oracle |
|---|---|---|---|---|
| Lista: sequência de valores | List | List | Array | VARCHAR2 (formato JSON) |
| Mapa: lista de objetos com chave única | Mapear | Mapear | Mapear | VARCHAR2 (formato JSON) |
| União: valores de diferentes tipos | Não Disponível | União | União | VARCHAR2 (formato JSON) |
| Objeto: zero ou mais pares de chave/valor | Struct | Struct | Registro | VARCHAR2 (formato JSON) |
Se seus arquivos de origem ORC, Parquet ou Avro contiverem tipos complexos, você poderá consultar a saída JSON para esses tipos complexos comuns. Por exemplo, o seguinte mostra um arquivo ORC, movie-info.orc, com um tipo complexo (o mesmo tratamento de tipo complexo se aplica aos arquivos de origem Parquet e Avro).
Considere o arquivo movie-info.orc com o seguinte 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 filme é categorizado por vários genres usando um array de genres. A matriz genres é uma array de structs e cada item tem uma id (int) e uma name (string). O array genres é considerado um tipo complexo. Você pode criar uma tabela sobre esse arquivo ORC usando DBMS_CLOUD.CREATE_EXTERNAL_TABLE da seguinte 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;
/
Quando você cria a tabela externa, o banco de dados gera automaticamente as colunas com base no esquema no arquivo ORC (se você estiver usando Avro ou Parquet, o mesmo se aplica). Para este exemplo, o DBMS_CLOUD.CREATE_EXTERNAL_TABLE cria uma tabela no seu banco de dados da seguinte 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;
)
Agora você pode consultar os dados do filme:
SELECT original_title, release_date, genres
FROM movie_info
WHERE release_date > '2000'
ORDER BY original_title;
Isso produz a seguinte saída:
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 o tipo complexo genres é retornado como um array JSON.
Para tornar os dados JSON mais úteis, você pode transformar a coluna usando as funções JSON da Oracle. Por exemplo, você pode usar a notação "." JSON, bem como as funções de transformação mais avançadas, como JSON_TABLE.
Consulte Simple Dot-Notation Access to JSON Data no Oracle Database 19c JSON Developer's Guide ou Oracle Database 26ai JSON Developer's Guide para obter informações sobre a notação ".".
Consulte SQL/JSON Function JSON_TABLE no Oracle Database 19c JSON Developer's Guide ou Oracle Database 26ai JSON Developer's Guide para obter informações sobre JSON_TABLE.
O exemplo a seguir mostra uma consulta na tabela que pega cada valor da matriz e transforma o valor em uma linha no conjunto 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;
O JSON_TABLE cria uma linha para cada valor da matriz, pensa na junção externa e a estrutura é analisada para extrair o nome do gênero. Isso produz a seguinte saída:
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"}]
DBMS_CLOUD - Mapeamento de Nome de Coluna Pacote Avro, ORC e Parquet para Oracle
Descreve as regras de como os nomes de coluna Avro, ORC e Parquet são convertidos em nomes de coluna Oracle.
Os seguintes são suportados para nomes de coluna Avro, ORC e Parquet, mas podem exigir o uso de aspas duplas para referências do Oracle SQL em tabelas externas. Assim, para facilitar o uso e evitar a necessidade de usar aspas duplas ao fazer referência a nomes de colunas, se possível, não use os seguintes nomes de colunas Avro, ORC e Parquet:
- Blanks incorporados
- Números principais
- Sublinhados principais
- Palavras reservadas do Oracle SQL
A tabela a seguir mostra vários tipos de nomes de colunas Avro, ORC e Parquet e regras para usar os nomes de colunas nos nomes de colunas Oracle em tabelas externas.
| Nome de Avro, ORC ou Parquet | CREATE TABLE Nome | CATÁLOGO Oracle | SQL Válido | Notas |
|---|---|---|---|---|
| parte, Peça ou Peça | parte, parte, parte | PARTE |
|
O Oracle implicitamente coloca os nomes de colunas sem aspas em letras maiúsculas. |
| Nº da Ordem | "Nº da Ordem" | Nº da Ordem | select "Ord No" |
Aspas duplas são necessárias quando há espaços em branco incorporados, o que também preserva as letras maiúsculas e minúsculas do caractere. |
| __index_key__ | "__index_key__" | __index_key__ | select "__index_key__" |
Aspas duplas são necessárias quando há um sublinhado à esquerda, que também preserva as letras maiúsculas e minúsculas do caractere. |
| 6 vias | "6 Caminho" | 6 vias | select "6Way" |
As aspas duplas são necessárias quando há um dígito numérico à esquerda, o que também preserva as letras maiúsculas e minúsculas. |
| criar, Criar ou CRIAR, e assim por diante. (qualquer variação de caso) partição, Partição, PARTIÇÃO etc. (para uma palavra Reservada pela Oracle) | "CRIAR" "PARTIÇÃO" | CRIAR PARTIÇÃO |
|
Aspas duplas são necessárias em torno de palavras reservadas do Oracle SQL. Eles são forçados a usar letras maiúsculas, mas sempre devem ter aspas duplas quando usados em qualquer lugar no SQL. |
| ROWID, ROWID, ROWID, etc. (para ROWID, consulte as observações) | ide da linha |
|
Para ROWID, qualquer variação entre maiúsculas e minúsculas de ROWID preserva a caixa e deve sempre ter aspas duplas e usar as variações de caixa originais. Devido ao conflito inerente com o Oracle ROWID da tabela, se você especificar ROWID maiúsculo, ele será armazenado automaticamente como "ROWID" minúsculo e sempre deverá ter aspas duplas quando referenciado. |
Observações
-
em geral, é possível fazer referência a um nome de coluna em uma tabela externa sem aspas duplas.
-
A menos que haja um espaço em branco incorporado, um sublinhado à esquerda ("_") ou um dígito numérico à esquerda ("0" a "9") no nome da coluna, a caixa original do nome da coluna é preservada e deve sempre ser referenciada com aspas duplas e usando a caixa original (maiúscula, minúscula ou mista) do nome da coluna Avro, ORC ou Parquet.
-
Após usar
DBMS_CLOUD.CREATE_EXTERNAL_TABLEpara criar uma tabela externa com o formato especificado comoavro,orcouparquet, use o comandoDESCRIBEno SQL*Plus para exibir os nomes de coluna da tabela. -
Quando as Palavras Reservadas do Oracle SQL são usadas em nomes de coluna Avro, ORC ou Parquet, elas sempre devem ter aspas duplas quando referenciadas em qualquer lugar do SQL. Consulte Oracle SQL Reserved Words na Oracle Database 26ai SQL Language Reference ou Oracle Database 26ai SQL Language Reference para obter mais informações.