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