DBMS_CLOUD: Trabalhando com Dados no Oracle
Hoje eu vou explorar alguns aspectos do pacote DBMS_CLOUD, uma ferramenta poderosa para trabalhar com dados no Oracle Database em conjunto com o armazenamento de objetos. Neste artigo, discutirei a visão geral do DBMS_CLOUD e alguns pequenos exemplos práticos de uso.
Visão Geral do DBMS_CLOUD
O pacote DBMS_CLOUD oferece suporte abrangente para trabalhar com dados no armazenamento de objetos. Aqui estão alguns dos principais recursos:
- Gerenciamento de Credenciais: O DBMS_CLOUD permite gerenciar suas credenciais para acessar o Object Store.
- Cópia de Dados: Você pode carregar dados externos no banco de dados em uma única operação, sem a necessidade de criar objetos no banco de dados. A operação de carga é monitorada e rastreada dentro do banco de dados.
- Validação de Conteúdo: Antes de consumir dados externos, você pode verificar seu conteúdo e identificar linhas que não estão no formato esperado.
Exemplos Práticos
Aqui estão alguns exemplos de uso do DBMS_CLOUD:
Copiando Dados de um Arquivo JSON
Suponhamos que você tenha um arquivo JSON chamado “channels.txt” armazenado no Object Storage. Você pode copiar os dados desse arquivo para uma tabela chamada “CHANNELS” no banco de dados usando o seguinte procedimento:
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Apr 1 07:37:39 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> -- Exemplo 1: Copiando Dados de um Arquivo JSON
SQL> BEGIN
2 DBMS_CLOUD.COPY_DATA (
3 table_name => 'CHANNELS',
4 file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/p/unique-pre-authenticated-string/n/namespace-string/b/bucketname/o/channels.txt',
5 format => json_object('delimiter' value ',')
6 );
7 END;
8 /
PL/SQL procedure successfully completed.
SQL> -- Exibindo os dados copiados para a tabela CHANNELS
SQL> SELECT * FROM CHANNELS;
CHANNEL_ID CHANNEL_NAME
---------- --------------------
1 News
2 Sports
3 Entertainment
4 Finance
5 Weather
SQL> EXIT
Neste exemplo, substitua a URL do arquivo pelo link correto do seu arquivo JSON no Object Storage. Certifique-se de que as credenciais de acesso ao Object Store estejam configuradas corretamente.
Listando Objetos no Armazenamento de Objetos
Para listar objetos em um diretório específico no Object Storage, você pode usar a função LIST_OBJECTS
:
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Apr 1 07:37:39 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> -- Exemplo 2: Listando Objetos no Armazenamento de Objetos
SQL> DECLARE
2 l_objects DBMS_CLOUD.OBJECT_LIST_T;
3 BEGIN
4 l_objects := DBMS_CLOUD.LIST_OBJECTS(
5 credential_name => 'OBJ_STORE_CRED',
6 prefix => 'myCollection'
7 );
8
9 FOR i IN 1..l_objects.COUNT LOOP
10 DBMS_OUTPUT.PUT_LINE(l_objects(i).object_name);
11 END LOOP;
12 END;
13 /
Object1.txt
Object2.csv
Object3.json
...
PL/SQL procedure successfully completed.
SQL> EXIT
Neste exemplo, substitua 'OBJ_STORE_CRED'
pelo nome correto da credencial que você configurou para acessar o Object Store. O parâmetro prefix
define o diretório no qual você deseja listar os objetos.
Carregando Dados de um Arquivo CSV
Suponhamos que você tenha um arquivo CSV chamado “sales_data.csv” no Object Storage. Para carregar esses dados em uma tabela chamada “SALES”, siga este procedimento:
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Apr 1 07:37:39 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> -- Exemplo 3: Carregando Dados de um Arquivo CSV
SQL> BEGIN
2 DBMS_CLOUD.COPY_DATA (
3 table_name => 'SALES',
4 file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/p/unique-pre-authenticated-string/n/namespace-string/b/bucketname/o/sales_data.csv',
5 format => json_object('type' value 'CSV', 'skipheaders' value 1)
6 );
7 END;
8 /
PL/SQL procedure successfully completed.
SQL> -- Exibindo os dados copiados para a tabela SALES
SQL> SELECT * FROM SALES;
SALES_ID PRODUCT_NAME QUANTITY_SOLD
-------- -------------- -------------
1 Widget A 100
2 Widget B 200
3 Widget C 150
4 Widget D 50
5 Widget E 300
SQL> EXIT
Aqui, ajuste a URL do arquivo para corresponder ao seu arquivo CSV e verifique se as credenciais estão configuradas corretamente.
Validando Dados Externos
Antes de consumir dados externos, é importante validar seu conteúdo. Suponhamos que você tenha um arquivo CSV chamado “customer_data.csv”. Você pode usar o seguinte procedimento para validar o conteúdo:
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Apr 1 07:37:39 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> -- Exemplo 4: Validando Dados Externos
SQL> DECLARE
2 l_validation_result DBMS_CLOUD.VALIDATE_CONTENT_RESULT_T;
3 BEGIN
4 l_validation_result := DBMS_CLOUD.VALIDATE_CONTENT(
5 credential_name => 'OBJ_STORE_CRED',
6 file_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/p/unique-pre-authenticated-string/n/namespace-string/b/bucketname/o/customer_data.csv',
7 format => json_object('type' value 'CSV', 'skipheaders' value 1)
8 );
9
10 IF l_validation_result.is_valid THEN
11 DBMS_OUTPUT.PUT_LINE('O conteúdo do arquivo é válido.');
12 ELSE
13 DBMS_OUTPUT.PUT_LINE('O conteúdo do arquivo não está no formato esperado. Erros encontrados:');
14 FOR i IN 1..l_validation_result.error_count LOOP
15 DBMS_OUTPUT.PUT_LINE(l_validation_result.errors(i).error_message);
16 END LOOP;
17 END IF;
18 END;
19 /
O conteúdo do arquivo é válido.
PL/SQL procedure successfully completed.
SQL> EXIT
Neste exemplo, substitua a URL do arquivo pelo link correto do seu arquivo CSV no Object Storage. O parâmetro format
especifica o tipo de arquivo (neste caso, CSV) e o número de linhas de cabeçalho a serem ignoradas (1, no exemplo acima).
Certifique-se de que as credenciais de acesso ao Object Store estejam configuradas corretamente. A validação de conteúdo ajuda a garantir que os dados externos estejam prontos para uso no banco de dados Oracle.
Conclusão
O DBMS_CLOUD é uma ferramenta valiosa para integrar dados externos ao Oracle Database. Ele simplifica o processo de carregamento e validação de dados, permitindo que você aproveite o armazenamento de objetos de maneira eficiente.
É claro que esse pacote é muito mais abrangente do que esses exemplos que citei, por isso indico que leia o material descrito nas referências para um completo entendimento dessa DBMS.
Abs
Referências
- Documentação Oficial do Oracle – DBMS_CLOUD
- Função LIST_OBJECTS do DBMS_CLOUD
- Acesso ao Oracle Object Storage com o DBMS_CLOUD