Oracle LiveLabs实验:Load and Analyze Your Data with Autonomous Database

Posted dingdingfish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle LiveLabs实验:Load and Analyze Your Data with Autonomous Database相关的知识,希望对你有一定的参考价值。

概述

本研讨会中的实验将引导您完成开始使用 Oracle 自治数据库的所有步骤。 首先,您将创建一个 Oracle 自治数据库实例。 然后,您将练习使用自治数据库工具和 API 从不同位置以不同格式加载数据的几种方法。 您将使用 SQL 分析数据并使用 Oracle Analytics Cloud 构建分析仪表板。

此实验申请地址在这里

实验帮助在这里

此实验预估完成时间90分钟。如果不包括实验5:数据可视化,我用了2个小时。

本实验的作者为Nilay Panchal,贡献者为Richard Green。

Oracle MovieStream 是一种虚构的电影流服务 - 类似于您当前订阅的服务。 他们面临着许多跨行业组织所面临的典型挑战。 MovieStream 必须:

  • 更好地了解他们的客户,以确保他们喜欢这项服务
  • 以合适的价格向合适的客户提供合适的产品
  • 发展业务,成为流媒体业务的主导者

Oracle 云提供的平台,可以高效地交付安全、有洞察力、可扩展和高性能的解决方案。 MovieStream 利用 Oracle 自治数据库和 Oracle 云基础设施 (OCI) 数据湖服务设计了他们的解决方案。他们的数据架构遵循 Oracle 参考架构企业数据仓库 - 一个集成数据湖。回顾架构是值得的,这样您就可以了解集成数据湖和数据仓库的价值 - 因为它使您能够使用所有数据回答更复杂的问题。

在本次研讨会中,我们将从 MovieStream 架构的两个关键组件开始。 MovieStream 正在跨 Oracle 对象存储和自治数据库存储他们的数据。数据从各种来源捕获到对象存储中的着陆区。然后对这些数据进行处理(清理、转换和优化)并存储在对象存储的黄金区域中。整理数据后,将其加载到自治数据库中,由用户社区的许多(和不同的)成员进行分析。

研讨会目标

  • 供应新的 Oracle 自治数据库实例
  • 从本地计算机上的文件加载数据
  • 从对象存储桶加载数据
  • 使用 Oracle Analytics Cloud 从您的数据集中创建引人注目的仪表板
  • 加载和分析 JSON 集合
  • 从公共 REST 服务加载最新消息并运行该消息的情绪分析

实验 1:创建 Oracle 自治数据库实例

本实验室将引导您完成开始使用 Oracle 云上的 Oracle 自治数据库(自治数据仓库 [ADW] 或自治事务处理 [ATP]都可以。)的步骤。 在本实验中,您将预配一个新的 ADW 实例。

创建一个Shared Infrastructure下的ADW。

  • OCPU count : 1 (默认)
  • Storage (TB) : 1 (默认)
  • Auto Scaling:勾选 (默认)
  • network access:Secure access from everywhere

服务供应时间如下,耗时40秒:

Mon, Nov 21, 2022, 08:32:33 UTC	到 Mon, Nov 21, 2022, 08:33:13 UTC

自治数据仓库的典型工作流程的文档见这里

实验 2:使用免费样本数据集

在本实验中,您将使用 SQL 工作表探索 Oracle 自治数据仓库 (ADW) 或自治事务处理 (ATP) 实例随附的示例数据集。

本实验使用 SQL 工作表,它是 Oracle 自治数据库的数据库操作基于 Web 的界面的功能之一。

本实验将演示对 ADW 开箱即用提供的示例数据集的查询。 ADW 提供 Oracle 销售历史示例模式星型模式基准 (SSB) 数据集。 这些数据集分别位于 SH 和 SSB 模式中。

您将对 SSB 数据集运行基本查询,该数据集是一个 1 TB 的数据集,其中包含一个包含大约 60 亿行的事实表和几个维度表。

任务 1:连接 SQL Worksheet

Database Action菜单,以ADMIN用户登录。在Development部分,单击SQL。

任务 2:在 SQL Worksheet 中运行脚本

在SQL Worksheet中输入以下SQL并运行:

select /* low */ c_city,c_region,count(*)
from ssb.customer c_low
group by c_region, c_city
order by count(*);

如果可能,ADW 还会为您缓存查询结果。 如果您多次运行相同的查询,您会注意到结果被缓存后的响应时间要短得多。以下为第1次到第5次运行的时间。

Execution time: 0.221 seconds
Execution time: 0.008 seconds
Execution time: 0.008 seconds
Execution time: 0.009 seconds
Execution time: 0.008 seconds

实验 3:加载数据

介绍

在本实验中,您将使用本地文件系统中的示例数据创建和加载 Oracle 自治数据库表,将文件上传到 Oracle 云基础设施 (OCI) 对象存储,使用 OCI 对象存储上的文件中的数据创建和加载表 , 并对有错误的数据加载进行故障排除。

您可以使用 Oracle 数据库工具以及 Oracle 和第三方数据集成工具将数据加载到新的 Oracle 自治数据库(Oracle 自治数据仓库 [ADW] 或 Oracle 自治事务处理 [ATP])中。 您可以从以下数据源加载数据:

  • 来自本地设备中的文件,或
  • 来自远程数据库中的表,或
  • 从存储在基于云的对象存储(Oracle、S3、Azure、Google)中的文件

预计时间:30 分钟

目标

  • 了解如何使用本地文件系统中的示例数据创建和加载 ADW 表
  • 了解如何将文件上传到 OCI 对象存储
  • 了解如何为您的自治数据库定义对象存储凭据
  • 了解如何从对象存储加载数据
  • 了解如何解决数据加载问题

任务 1:下载示例数据以从本地文件加载

您需要将包含 CHANNELS 信息的 .csv 文件下载到本地计算机,然后在下一个任务中使用它来填充 ADW 数据库中的 CHANNELS_LOCAL 表。 单击此链接下载示例 channels.csv 文件并将其保存到本地计算机上的目录中。此文件约1KB。

任务 2:使用数据库操作数据加载工具加载本地数据

Database Actions菜单,ADMIN用户登录,Data Tools 部分, 单击 DATA LOAD和LOCAL FILE,单击“下一步”,然后选择刚刚下载的文件。最后选择Run。

这个目标表是在加载时创建的,之前并没有。

Name             Null? Type         
---------------- ----- ------------ 
CHANNEL_ID             NUMBER       
CHANNEL_DESC           VARCHAR2(64) 
CHANNEL_CLASS          VARCHAR2(64) 
CHANNEL_CLASS_ID       NUMBER       
CHANNEL_TOTAL          VARCHAR2(64) 
CHANNEL_TOTAL_ID       NUMBER       

任务 3:下载用于暂存到对象存储的示例数据

现在,您将下载一个 zip 文件,其中包含您将暂存到 OCI 对象存储的数据文件,以便在以后的任务中填充多个表。

单击此处下载示例源文件的 zip 文件并解压,此文件约6MB。

任务 4:导航到对象存储并创建存储桶

在OCI Console中,进入Object Storage服务并创建bucket。bucket的名称在整个租户内必须唯一。

任务 5:将文件上传到您的 OCI 对象存储桶

解压刚下载的文件并上传,可以批量上传。

任务 6:找到对象存储基 URL

获取此 URL 的最简单方法是单击对象存储中任何已上传文件右侧的省略号菜单中的View Object Details。
类似于linux中的dirname,之后会作为参数Bucket URI:

$ dirname https://objectstorage.ap-seoul-1.oraclecloud.com/n/c4u04/b/bucket-20221121-1704-ADW/o/chan_v3.dat
https://objectstorage.ap-seoul-1.oraclecloud.com/n/c4u04/b/bucket-20221121-1704-ADW/o

任务 7:创建对象存储身份验证令牌

要从 Oracle 云基础设施 (OCI) 对象存储加载数据,您需要一个具有适当权限的 OCI 用户才能将数据读取(或上传)到对象存储。 数据库和对象存储之间的通信依赖于本机 URI 和 OCI 用户 Auth Token。

生成Auth Token,并立即保存,因为之后就看不到了:

BlM)****dmt6

任务 8:使用数据库操作数据加载工具从对象存储加载数据

仍然以ADMIN用户进入Database Actions,单击Data Studio部分的DATA LOAD。

然后选择 Administration部分的CLOUD LOCATIONS。单击右上角Add Cloud Store Location。

  • Name:ADWCLab
  • Create Credential
  • Cloud Store:Oracle
  • Credential Name:OBJ_STORE_CRED
  • Oracle Cloud Infrastructure User Name:LL38388-USER
  • Auth Token:BlM)+0[2J;gsAWbdmt6
  • Bucket URI: https://objectstorage.ap-seoul-1.oraclecloud.com/n/c4u04/b/bucket-20221121-1704-ADW/o

单击LOAD DATA和CLOUD STORAGE,然后下一步。将CSV文件拖拽到右边,需要改一下目标表的名字。

这两个表很小,很快就加载成功了。

任务 9:使用 PL/SQL 包 DBMS_CLOUD 从对象存储加载数据

作为向导引导的数据加载的替代方法,您可以直接使用 PL/SQL 包 DBMS_CLOUD。 这是任何负载自动化的首选。

为了获得最快的数据加载体验,Oracle 建议在将数据加载到 ADW 或 ATP 数据库之前将源文件上传到基于云的对象存储,例如 Oracle 云基础设施对象存储。

要将数据从云存储中的文件加载到 Oracle 自治数据库中,请使用 PL/SQL DBMS_CLOUD 包。 DBMS_CLOUD 包支持从以下云源加载数据文件:Oracle Cloud Infrastructure Object Storage、Oracle Cloud Infrastructure Object Storage Classic、Amazon AWS S3、Microsoft Azure Cloud Storage 和 Google Cloud Storage。

此任务显示如何使用 DBMS_CLOUD 包中的两个过程从 Oracle 云基础设施对象存储加载数据:

  • create_credential:将对象存储凭据存储在您的自治数据仓库模式中。
    您将使用此过程在 ADW 管理架构中创建对象存储凭据。
  • copy_data:将指定的源文件加载到表中。 该表必须已存在于 ADW 中
    您将使用此过程将表加载到您的管理模式,其中包含来自 Oracle 云基础设施对象存储云服务中暂存的数据文件的数据。

与数据库操作 DATA LOAD 工具为您提供在数据加载过程中自动创建目标 Oracle 自治数据库表的选项的早期任务不同,以下使用 DBMS_CLOUD 包加载的步骤要求您预先创建目标表

在 SQL Worksheet 中以 ADMIN 用户身份连接,复制并粘贴此代码片段以将所需的表创建到工作表中。 花点时间检查脚本。 在创建表之前,您将首先删除任何具有相同名称的表。 然后单击“运行脚本”按钮运行它。

DROP TABLE sales;
DROP TABLE customers;
DROP TABLE countries;
DROP TABLE supplementary_demographics;
DROP TABLE costs;
DROP TABLE times;
DROP TABLE promotions;
DROP TABLE products;
DROP TABLE channels;

CREATE TABLE sales (
    prod_id             NUMBER          NOT NULL,
    cust_id             NUMBER          NOT NULL,
    time_id             DATE            NOT NULL,
    channel_id          NUMBER(6)       NOT NULL,
    promo_id            NUMBER          NOT NULL,
    quantity_sold       NUMBER(10,2)    NOT NULL,
    amount_sold         NUMBER(10,2)    NOT NULL);
    
CREATE TABLE costs (
    prod_id     NUMBER          NOT NULL,
    time_id     DATE            NOT NULL,
    promo_id    NUMBER          NOT NULL,
    channel_id  NUMBER(6)       NOT NULL,
    unit_cost   NUMBER(10,2)    NOT NULL,
    unit_price  NUMBER(10,2)    NOT NULL);

CREATE TABLE times (
    time_id                     DATE            NOT NULL,
    day_name                    VARCHAR2(9)     NOT NULL,
    day_number_in_week          NUMBER(1)       NOT NULL,
    day_number_in_month         NUMBER(2)       NOT NULL,
    calendar_week_number        NUMBER(2)       NOT NULL,
    fiscal_week_number          NUMBER(2)       NOT NULL,
    week_ending_day             DATE            NOT NULL,
    week_ending_day_id          NUMBER          NOT NULL,
    calendar_month_number       NUMBER(2)       NOT NULL,
    fiscal_month_number         NUMBER(2)       NOT NULL,
    calendar_month_desc         VARCHAR2(8)     NOT NULL,
    calendar_month_id           NUMBER          NOT NULL,
    fiscal_month_desc           VARCHAR2(8)     NOT NULL,
    fiscal_month_id             NUMBER          NOT NULL,
    days_in_cal_month           NUMBER          NOT NULL,
    days_in_fis_month           NUMBER          NOT NULL,
    end_of_cal_month            DATE            NOT NULL,
    end_of_fis_month            DATE            NOT NULL,
    calendar_month_name         VARCHAR2(9)     NOT NULL,
    fiscal_month_name           VARCHAR2(9)     NOT NULL,
    calendar_quarter_desc       CHAR(7)         NOT NULL,
    calendar_quarter_id         NUMBER          NOT NULL,
    fiscal_quarter_desc         CHAR(7)         NOT NULL,
    fiscal_quarter_id           NUMBER          NOT NULL,
    days_in_cal_quarter         NUMBER          NOT NULL,
    days_in_fis_quarter         NUMBER          NOT NULL,
    end_of_cal_quarter          DATE            NOT NULL,
    end_of_fis_quarter          DATE            NOT NULL,
    calendar_quarter_number     NUMBER(1)       NOT NULL,
    fiscal_quarter_number       NUMBER(1)       NOT NULL,
    calendar_year               NUMBER(4)       NOT NULL,
    calendar_year_id            NUMBER          NOT NULL,
    fiscal_year                 NUMBER(4)       NOT NULL,
    fiscal_year_id              NUMBER          NOT NULL,
    days_in_cal_year            NUMBER          NOT NULL,
    days_in_fis_year            NUMBER          NOT NULL,
    end_of_cal_year             DATE            NOT NULL,
    end_of_fis_year             DATE            NOT NULL );

CREATE TABLE products (
    prod_id                     NUMBER(6)       NOT NULL,
    prod_name                   VARCHAR2(50)    NOT NULL,
    prod_desc                   VARCHAR2(4000)  NOT NULL,
    prod_subcategory            VARCHAR2(50)    NOT NULL,
    prod_subcategory_id         NUMBER          NOT NULL,
    prod_subcategory_desc       VARCHAR2(2000)  NOT NULL,
    prod_category               VARCHAR2(50)    NOT NULL,
    prod_category_id            NUMBER          NOT NULL,
    prod_category_desc          VARCHAR2(2000)  NOT NULL,
    prod_weight_class           NUMBER(3)       NOT NULL,
    prod_unit_of_measure        VARCHAR2(20)    ,
    prod_pack_size              VARCHAR2(30)    NOT NULL,
    supplier_id                 NUMBER(6)       NOT NULL,
    prod_status                 VARCHAR2(20)    NOT NULL,
    prod_list_price             NUMBER(8,2)     NOT NULL,
    prod_min_price              NUMBER(8,2)     NOT NULL,
    prod_total                  VARCHAR2(13)    NOT NULL,
    prod_total_id               NUMBER          NOT NULL,
    prod_src_id                 NUMBER          ,
    prod_eff_from               DATE            ,
    prod_eff_to                 DATE            ,
    prod_valid                  VARCHAR2(1)     );

CREATE TABLE channels (
    channel_id                  NUMBER(6)          NOT NULL,
    channel_desc                VARCHAR2(20)    NOT NULL,
    channel_class               VARCHAR2(20)    NOT NULL,
    channel_class_id            NUMBER(6)          NOT NULL,
    channel_total               VARCHAR2(13)    NOT NULL,
    channel_total_id            NUMBER(6)          NOT NULL);

CREATE TABLE promotions (
    promo_id                    NUMBER(6)       NOT NULL,
    promo_name                  VARCHAR2(30)    NOT NULL,
    promo_subcategory           VARCHAR2(30)    NOT NULL,
    promo_subcategory_id        NUMBER          NOT NULL,
    promo_category              VARCHAR2(30)    NOT NULL,
    promo_category_id           NUMBER          NOT NULL,
    promo_cost                  NUMBER(10,2)    NOT NULL,
    promo_begin_date            DATE            NOT NULL,
    promo_end_date              DATE            NOT NULL,
    promo_total                 VARCHAR2(15)    NOT NULL,
    promo_total_id              NUMBER          NOT NULL);

CREATE TABLE customers (
    cust_id                     NUMBER          NOT NULL,
    cust_first_name             VARCHAR2(20)    NOT NULL,
    cust_last_name              VARCHAR2(40)    NOT NULL,
    cust_gender                 CHAR(1)         NOT NULL,
    cust_year_of_birth          NUMBER(4)       NOT NULL,
    cust_marital_status         VARCHAR2(20)    ,
    cust_street_address         VARCHAR2(40)    NOT NULL,
    cust_postal_code            VARCHAR2(10)    NOT NULL,
    cust_city                   VARCHAR2(30)    NOT NULL,
    cust_city_id                NUMBER          NOT NULL,
    cust_state_province         VARCHAR2(40)    NOT NULL,
    cust_state_province_id      NUMBER          NOT NULL,
    country_id                  NUMBER          NOT NULL,
    cust_main_phone_number      VARCHAR2(25)    NOT NULL,
    cust_income_level           VARCHAR2(30)    ,
    cust_credit_limit           NUMBER          ,
    cust_email                  VARCHAR2(50)    ,
    cust_total                  VARCHAR2(14)    NOT NULL,
    cust_total_id               NUMBER          NOT NULL,
    cust_src_id                 NUMBER          ,
    cust_eff_from               DATE            ,
    cust_eff_to                 DATE            ,
    cust_valid                  VARCHAR2(1)     );

CREATE TABLE countries (
    country_id                  NUMBER          NOT NULL,
    country_iso_code            CHAR(2)         NOT NULL,
    country_name                VARCHAR2(40)    NOT NULL,
    country_subregion           VARCHAR2(30)    NOT NULL,
    country_subregion_id        NUMBER          NOT NULL,
    country_region              VARCHAR2(20)    NOT NULL,
    country_region_id           NUMBER          NOT NULL,
    country_total               VARCHAR2(11)    NOT NULL,
    country_total_id            NUMBER          NOT NULL,
    country_name_hist           VARCHAR2(40));


CREATE TABLE supplementary_demographics
  ( cust_id          		NUMBER NOT NULL,
    education        		VARCHAR2(21),
    occupation       		VARCHAR2(21),
    household_size   		VARCHAR2(21),
    yrs_residence    		NUMBER,
    affinity_card    		NUMBER(10),
    bulk_pack_diskettes 	NUMBER(10),
    flat_panel_monitor  	NUMBER(10),
    home_theater_package 	NUMBER(10),
    bookkeeping_application 	NUMBER(10),
    printer_supplies 		NUMBER(10),
    y_box_games 		NUMBER(10),
    os_doc_set_kanji 		NUMBER(10),
    comments         		VARCHAR2(4000));

使用以下的代码加载数据,运行前替换尖括号中的数据,即将<bucket URI>替换为https://objectstorage.ap-seoul-1.oraclecloud.com/n/c4u04/b/bucket-20221121-1704-ADW/o

/* Replace <bucket URI> below with the URL you copied from your files in OCI Object Storage at runtime.
*/
set define on
define file_uri_base = '<bucket URI>'

begin
 dbms_cloud.copy_data(
    table_name =>'CHANNELS',
    credential_name =>'OBJ_STORE_CRED',
    file_uri_list =>'&file_uri_base/chan_v3.dat',
    format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
 );

 dbms_cloud.copy_data(
    table_name =>'COUNTRIES',
    credential_name =>'OBJ_STORE_CRED',
    file_uri_list =>'&file_uri_base/coun_v3.dat',
    format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
 );

 dbms_cloud.copy_data(
    table_name =>'CUSTOMERS',
    credential_name =>'OBJ_STORE_CRED',
    file_uri_list =>'&file_uri_base/cust1v3.dat',
    format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS')
 );

 dbms_cloud.copy_data(
    table_name =>'SUPPLEMENTARY_DEMOGRAPHICS',
    credential_name =>'OBJ_STORE_CRED',
    file_uri_list =>'&file_uri_base/dem1v3.dat',
    format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
 );

 dbms_cloud.copy_data(
    table_name =>'SALES',
    credential_name =>'OBJ_STORE_CRED',
    file_uri_list =>'&file_uri_base/dmsal_v3.dat',
    format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD')
 );

 dbms_cloud.copy_data(
    table_name =>'PRODUCTS',
    credential_name =>'OBJ_STORE_CRED',
    file_uri_list =>'&file_uri_base/prod1v3.dat',
    format => json_object('delimiter' value '|', 'quote' value '^', 'ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
 );

 dbms_cloud.copy_data(
    table_name =>'PROMOTIONS',
    credential_name =>'OBJ_STORE_CRED',
    file_uri_list =>'&file_uri_base/prom1v3.dat',
    format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
 );

 dbms_cloud.copy_data(
    table_name =>'SALES',
    credential_name =>'OBJ_STORE_CRED',
    file_uri_list =>'&file_uri_base/sale1v3.dat',
    format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
 );

 dbms_cloud.copy_data(
    table_name =>'TIMES',
    credential_name =>'OBJ_STORE_CRED',
    file_uri_list =>'&file_uri_base/time_v3.dat',
    format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
 );

 dbms_cloud.copy_data(
    table_name =>'COSTS',
    credential_name =>'OBJ_STORE_CRED',
    file_uri_list =>'&file_uri_base/costs.dat',
    format => json_object('ignoremissingcolumns' value 'true', 'dateformat' value 'YYYY-MM-DD', 'blankasnull' value 'true')
 );
end;
/

您已成功加载示例表。 您现在可以运行在 Oracle 文档的关系型分析部分的大部分示例查询。 例如,要分析 2000 年某个季度特定客户 ID 的累计销售量,您可以使用“运行脚本”按钮运行以下代码片段中的查询。 阅读有关数据仓库的html#GUID-452FBA23-697

以上是关于Oracle LiveLabs实验:Load and Analyze Your Data with Autonomous Database的主要内容,如果未能解决你的问题,请参考以下文章

Oracle LiveLabs实验: Oracle多租户基础

Oracle LiveLabs实验: Oracle多租户基础

Oracle LiveLabs实验:Oracle RAC Fundamentals

Oracle LiveLabs实验:Install Oracle Database 21c

Oracle LiveLabs实验:DB Security - Oracle Label Security (OLS)

Oracle LiveLabs实验:Oracle Label Security (OLS)