操作手册
【试用教程】AnalyticDB MySQL湖仓版作业开发
ads
手动配置
45
教程简介
在本教程中,您将学习如何创建阿里云AnalyticDB MySQL湖仓版(3.0)集群并使用Spark SQL或XIHE SQL进行作业开发。
云原生数据仓库AnalyticDB MySQL版是基于湖仓一体架构打造的实时数仓,高度兼容MySQL,支持毫秒级更新,亚秒级查询。
当您的集群中有计算预留资源和存储预留资源时,会按小时从ACU时包中抵扣资源。ACU时包和存储资源包的有效期均为1个月,有效期内,若ACU时包和存储资源包剩余资源不足以抵扣,超出部分的资源费用将按量付费。超过有效期后,ACU时包和存储资源包剩余资源将作废。详情请参见ACU时包和存储资源包。
试用时长到期后集群不会自动释放,将按量计费。如果您无需继续使用,请及时释放集群。如果您需要继续使用,建议您转换为包年包月计费。具体操作,请参见转换计费方式和湖仓版(3.0)产品定价。
我能学到什么
熟悉AnalyticDB MySQL版创建集群、账号和资源组的流程。
体验AnalyticDB MySQL版外表作业开发和内表作业开发。
操作难度 | 易 |
所需时间 | 45分钟 |
使用的阿里云产品 | |
所需费用 |
准备环境及资源
15
开始教程前,请按以下步骤准备环境和资源:
访问阿里云免费试用。单击页面右上方的登录/注册按钮,并根据页面提示完成账号登录(已有阿里云账号)、账号注册(尚无阿里云账号)或实名认证(根据试用产品要求完成个人实名认证或企业实名认证)。
在产品类别列表中,选择数据库>数据仓库。单击云原生数据仓库 AnalyticDB MySQL 5000ACU*H 100GB 1个月卡片中的立即试用。
仅AnalyticDB MySQL的新用户可以访问阿里云免费试用申请试用资格。
在配置AnalyticDB MySQL版集群信息面板配置如下参数,部分参数为固定值,您无需配置。
参数 | 本教程示例值 | 说明 |
版本 | 湖仓版(3.0) | 免费试用的AnalyticDB MySQL版集群仅支持湖仓版(3.0)。 |
地域 | 华东1(杭州) | 如果需要体验外表开发,请选择与OSS项目空间相同的地域。 |
可用区 | 华东1 可用区 K | 可用区是地域中的一个独立物理区域,不同可用区之间没有实质性区别。 |
专有网络(VPC) | vpc-bp11i5s8p911pqvyi**** | 选择实例所属专有网络。 如果选择的地域没有VPC,可以前往VPC控制台创建。 |
专有网络交换机 | vsw-bp1nunj9d0u5fhga1**** | 选择实例所属交换机。 如果选择的可用区没有交换机,可以前往VPC控制台创建。 |
计算预留资源 | 80 ACU | 计算预留资源用于数据计算,默认值为80 ACU。本教程包括外表开发和内表开发两部分,您可以根据业务需求选择合适的计算预留资源。 ACU时包可用于抵扣计算预留资源,若ACU时包剩余资源不足以抵扣,超出部分的资源费用将按量付费。详情请参见ACU时包。 |
默认分配行为 | 是 | 计算预留资源是否全部分配给默认资源组。 |
存储预留资源 | 48 ACU | 存储预留资源可用于存储热数据。默认值为48 ACU。本教程包括外表开发和内表开发两部分,您可以根据业务需求选择合适的存储预留资源。 ACU时包可用于抵扣存储预留资源,若ACU时包剩余资源不足以抵扣,超出部分的资源费用将按量付费。详情请参见ACU时包。 |
版本升级策略 | 12:00~13:00 | 实例将在可维护时间段内自动升级到最新版本,默认版本升级时间窗口为12:00~13:00,您可以在购买实例后设置可维护时间段。 |
包类型 | ACU时包 | ACU时包用于抵扣湖仓版集群按量付费的计算预留资源、存储资源、弹性资源。 |
地域 | 华东1(杭州) | 集群所在的地域。 |
ACU规格 | 5000 | ACU时包的规格。固定值为5000 ACU。 在ACU时包有效期内,每小时从ACU时包中抵扣消耗的资源。若ACU时包剩余资源不足以抵扣,超出部分的资源费用将按量付费。 |
试用数量 | 1 | ACU时包的购买数量。固定值为1。 |
试用时长 | 1个月 | ACU时包的购买时长。 ACU时包的有效期为1个月(自然月),超过ACU时包有效期后,ACU时包的剩余资源将作废。详情请参见ACU时包。 |
资源包类型 | 中国内地-热数据通用 | 资源包类型,每种资源包只能抵扣特定地域的特定类型的存储空间。 例如,中国内地-热数据通用资源包只能抵扣中国内地地域的集群产生的热数据存储空间,无法抵扣中国香港或海外地域的存储空间,也无法抵扣任何地域的冷数据存储空间。详情请参见存储资源包。 |
资源包规格 | 100 GB | 资源包的规格。固定值为100 GB。 在资源包有效期内,每小时从资源包中抵扣消耗的资源。若资源包剩余资源不足以抵扣,超出部分的资源费用将按量付费。详情请参见存储资源包。 |
试用时长 | 1个月 | 资源包的购买时长。 购买时长为资源包的有效期,超过资源包有效期后,资源包剩余资源将作废。详情请参见存储资源包。 |
试用数量 | 1 | 资源包的购买数量。固定值为1。 |
同意协议后,单击立即试用。
如果需要体验外表作业开发,请开通OSS服务并在OSS控制台完成以下准备工作:
创建存储空间。在OSS管理控制台的Bucket列表页面,单击创建Bucket。在创建Bucket面板,设置Bucket名称,选择华东1(杭州)地域,本地冗余存储类型。
创建目录。单击目标Bucket名称,选择文件管理>文件列表,单击新建目录,目录名称设置为
test_xihe
。上传文件
xihe_oss.txt
至OSS路径oss://<yourBucketName>/test_xihe/
。单击test_xihe
目录名,保持默认配置,单击扫描文件,将本地文件上传至对应OSS路径。数据行分隔符为换行符,列分隔符为英文逗号(,)。示例数据文件内容为:001,Anna,99,London 002,Bob,67,USA 003,Cindy,78,Spain 004,Dan,100,Ch
创建数据库账号
5
在页面左上角,选择集群所在地域。
在湖仓版(3.0)页签,单击目标集群ID。
在左侧导航栏,单击账号管理。
在账号管理页面,单击创建账号。
在创建账号面板,配置数据库账号、账号类型、新密码和确认密码。
参数
本教程示例值
说明
数据库账号
test_user
根据控制台提示输入符合要求的名称。
账号类型
高权限账号
高权限账号默认绑定阿里云账号。创建完高权限账号后,可直接体验SQL开发功能。
新密码
Password123!
根据控制台提示输入符合要求的账号密码。
此密码仅为本教程示例,请勿在实际业务中使用。
确认密码
Password123!
再次输入高权限账号的密码。
单击确定,完成创建账号。
创建资源组
3
在左侧导航栏,单击集群管理>资源组管理。
单击资源组列表右上角的新增资源组。
在新增资源组面板,设置资源组名称、任务类型、计算预留资源和计算最大资源。
参数
本教程示例值
说明
资源组名称
test_group
根据控制台提示输入符合要求的名称。
任务类型
Job
Spark SQL和Xihe BSP SQL需在Job型资源组中运行。
计算预留资源
0 ACU
集群计算预留资源默认都分配给user_default资源组。如需为新资源组分配计算预留资源,请先减少user_default资源组的计算预留资源。
计算最大资源
8 ACU
免费试用的AnalyticDB MySQL版集群最大可选128 ACU。
单击确定,完成新建资源组。
开发外表
8
您可以选择Spark SQL或XIHE BSP SQL任意一种方式进行外表开发。
在左侧导航栏,单击作业开发>SQL开发。
在SQLConsole窗口,选择Spark引擎和Job型资源组。
输入SQL语句,将语句中的
<yourBucketName>
替换为您在OSS中创建的Bucket的名称,单击执行SQL(F8)。创建一个名为spark_external_db
的外库。CREATE DATABASE spark_external_db LOCATION 'oss://<yourBucketName>/';
如果您没有配置过日志路径,则在日志配置对话框中,单击确定。如果已经配置了日志路径,则在提示对话框中,单击继续执行。
输入SQL语句,将语句中的
<yourBucketName>
替换为您在OSS中创建的Bucket的名称,单击执行SQL(F8),并在提示对话框中,单击继续执行。在spark_external_db
库中创建外表spark_hudi_table
。CREATE TABLE spark_external_db.spark_hudi_table (id int, name string, score int, city string ) using hudi partitioned by (id) tblproperties (primaryKey = 'id', preCombinedField = 'city') LOCATION 'oss://<yourBucketName>/spark_external_db/';
输入SQL语句,单击执行SQL(F8),并在提示对话框中,单击继续执行。向外表
spark_hudi_table
中插入数据。INSERT OVERWRITE spark_external_db.spark_hudi_table PARTITION(id) VALUES (001,'Anna',99,'London'), (002,'Bob',67,'USA'), (003,'Cindy',78,'Spain'), (004,'Dan',100,'China');
输入SQL语句,单击执行SQL(F8),并在提示对话框中,单击继续执行。查询外表
spark_hudi_table
数据。SELECT * FROM spark_external_db.spark_hudi_table;
在左侧导航栏,单击作业开发>SQL开发。
在SQLConsole窗口,选择Xihe引擎和Job型资源组擎。
输入SQL语句,并单击执行SQL(F8),创建外库
xihe_external_db
。CREATE EXTERNAL DATABASE xihe_external_db;
输入SQL语句,将语句中的
<yourBucketName>
替换为您在OSS中创建的Bucket的名称,并单击执行SQL(F8),创建外表xihe_oss_table
。CREATE EXTERNAL TABLE xihe_external_db.xihe_oss_table ( id int , name string , score int, city string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION 'oss://<yourBucketName>/test_xihe/xihe_oss.txt';
输入SQL语句,并单击执行SQL(F8),查询外表
xihe_oss_table
数据。SELECT * FROM xihe_external_db.xihe_oss_table;
开发内表
10
您可以选择Spark SQL或XIHE BSP SQL任意一种方式进行内表开发。
创建ODS层数据表。
在左侧导航栏,单击作业开发>SQL开发。
在SQLConsole窗口,选择Spark引擎和Job型资源组。
输入SQL语句,单击执行SQL(F8)。创建一个名为
test_spark_db
的数据库。CREATE DATABASE test_spark_db;
如果您没有配置过日志路径,则在日志配置对话框中,单击确定。如果已经配置了日志路径,则在提示对话框中,单击继续执行。
输入SQL语句,单击执行SQL(F8),并在提示对话框中,单击继续执行。在
test_spark_db
库中创建ODS层的无索引、有分区的表adb_spark_ods
。CREATE TABLE test_spark_db.adb_spark_ods (id int, name string, age int) USING adb tblproperties ( 'distributeType' = 'HASH', 'distributeColumns' = 'id', 'partitionType' = 'VALUE', 'partitionColumn' = 'age', 'partitionCount' = '200', 'indexAll' = 'false');
输入SQL语句,单击执行SQL(F8),并在提示对话框中,单击继续执行。向内表
adb_spark_ods
中插入数据。INSERT OVERWRITE test_spark_db.adb_spark_ods PARTITION(age) VALUES (001,'Anna',18), (002,'Bob',22), (003,'Cindy',12), (004,'Dan',25);
创建DWD层数据表。本教程以从ODS层表中读取并过滤数据后写入DWD层表中为例。
输入SQL语句,单击执行SQL(F8),并在提示对话框中,单击继续执行。在
test_spark_db
库中创建一张无索引、有分区的表adb_spark_dwd
。CREATE TABLE test_spark_db.adb_spark_dwd ( id int, name string, age int ) USING adb TBLPROPERTIES( 'distributeType'='HASH', 'distributeColumns'='id', 'partitionType'='value', 'partitionColumn'='age', 'partitionCount'='200', 'indexAll'='false');
输入SQL语句,单击执行SQL(F8),并在提示对话框中,单击继续执行。从ODS层表
adb_spark_ods
中读取id
列不为002的数据并写入DWD层数据表。INSERT OVERWRITE test_spark_db.adb_spark_dwd partition(age) SELECT id, name, age FROM test_spark_db.adb_spark_ods WHERE id != 002;
创建ADS层数据表。ADS层表数据是对DWD层数据做了更精细地过滤,可直接用于业务分析,对查询速率有一定的要求,因此创建ADS层数据表时需添加索引。本教程从DWD层数据表
adb_spark_dwd
中读取age列大于15的数据并写入ADS层数据表adb_spark_ads
。输入SQL语句,单击执行SQL(F8),并在提示对话框中,单击继续执行。在
test_spark_db
库中创建一张有索引,有分区的表adb_spark_ads
。CREATE TABLE test_spark_db.adb_spark_ads ( id int, name string, age int ) USING adb TBLPROPERTIES( 'distributeType'='HASH', 'distributeColumns'='id', 'partitionType'='value', 'partitionColumn'='age', 'partitionCount'='200', 'indexAll'='true');
输入SQL语句,单击执行SQL(F8),并在提示对话框中,单击继续执行。从DWD层数据表
adb_spark_dwd
中读取age列大于15的数据并写入ADS层数据表adb_spark_ads
。INSERT OVERWRITE test_spark_db.adb_spark_ads partition(age) SELECT id, name, age FROM test_spark_db.adb_spark_dwd WHERE age > 15;
查询ADS层表数据。AnalyticDB MySQL版湖仓版(3.0)既支持通过Spark SQL或XIHE BSP SQL离线方式查询数据,也支持通过XIHE MPP SQL在线实时查询数据。为保证数据的实时性,本教程以XIHE MPP SQL在线方式查询ADS层表数据为例。
在SQLConsole窗口,选择Xihe引擎和(Interactive)user_default资源组。
输入SQL语句,并单击执行SQL(F8)。查询ADS层表数据。
SELECT * FROM test_spark_db.adb_spark_ads;
创建ODS层数据表。
在左侧导航栏,单击作业开发>SQL开发。
在SQLConsole窗口,选择Xihe引擎和Job型资源组。
输入SQL语句,并单击执行SQL(F8)。创建一个名为
test_xihe_db
的库。CREATE DATABASE test_xihe_db;
输入SQL语句,并单击执行SQL(F8)。创建表
adb_xihe_ods
。CREATE TABLE test_xihe_db.adb_xihe_ods (id int, name string, age int) DISTRIBUTED BY HASH (id) PARTITION BY VALUE (age) LIFECYCLE 4 INDEX_ALL='N';
输入SQL语句,并单击执行SQL(F8)。向表
adb_xihe_ods
中插入数据。INSERT INTO test_xihe_db.adb_xihe_ods(id,name,age) VALUES (001,'Anna',18), (002,'Bob',22), (003,'Cindy',12), (004,'Dan',25);
创建DWD层数据表。本教程以从ODS层表中读取并过滤数据后写入DWD层表中为例。
输入SQL语句,并单击执行SQL(F8)。在
test_xihe_db
库中创建一张无索引,有分区的表adb_xihe_dwd
。CREATE TABLE test_xihe_db.adb_xihe_dwd( id int, name string, age int) DISTRIBUTE BY HASH (id) PARTITION BY VALUE (age) LIFECYCLE 4 INDEX_ALL = 'N';
输入SQL语句,并单击执行SQL(F8)。从ODS层表
adb_xihe_ods
中读取id
列不为002的数据并写入DWD层数据表adb_xihe_dwd
。INSERT INTO test_xihe_db.adb_xihe_dwd SELECT id, name, age FROM test_xihe_db.adb_xihe_ods where id != 002;
创建ADS层数据表。ADS层表数据是对DWD层数据做了更精细地过滤,可直接用于业务分析,对查询速率有一定的要求,因此创建ADS层数据表时需添加索引。本教程从DWD层数据表
adb_xihe_dwd
中读取age列大于15的数据写入ADS层数据表adb_xihe_ads
。输入SQL语句,并单击执行SQL(F8)。在
test_xihe_db
库中创建一张有索引,有分区的表adb_xihe_ads
。CREATE TABLE test_xihe_db.adb_xihe_ads (id int, name string, age int) DISTRIBUTE BY HASH (id) PARTITION BY VALUE (age) LIFECYCLE 4;
输入SQL语句,并单击执行SQL(F8)。从DWD层数据表
adb_xihe_dwd
中读取age列大于15的数据并写入ADS层数据表adb_xihe_ads
。INSERT INTO test_xihe_db.adb_xihe_ads SELECT id, name, age FROM test_xihe_db.adb_xihe_dwd WHERE age > 15;
查询ADS层数据表。AnalyticDB MySQL版湖仓版(3.0)既支持通过Spark SQL或XIHE BSP SQL离线方式查询数据,也支持通过XIHE MPP SQL在线实时查询数据。为保证数据的实时性,本教程以XIHE MPP SQL在线方式查询ADS层表数据为例。
在SQLConsole窗口,选择Xihe引擎和(Interactive)user_default资源组。
输入SQL语句,并单击执行SQL(F8)。查询ADS层表数据。
SELECT * FROM test_xihe_db.adb_xihe_ads;
完成
1
完成开发外表或开发内表的查询操作后,会显示执行结果。
Spark SQL方式
使用Spark引擎和Job型资源组,执行
SELECT * FROM spark_external_db.spark_hudi_table;
。在SQLConsole窗口下方的执行记录中显示执行成功。
XIHE BSP SQL方式
使用Xihe引擎和Job型资源组,执行
SELECT * FROM xihe_external_db.xihe_oss_table;
。在SQLConsole窗口下方的执行记录中显示执行成功。
Spark SQL方式
使用Xihe引擎和(Interactive)user_default资源组,执行
SELECT * FROM test_spark_db.adb_spark_ads;
。在SQLConsole窗口下方的执行记录中显示执行成功。
XIHE BSP SQL方式
使用Xihe引擎和(Interactive)user_default资源组,执行
SELECT * FROM test_xihe_db.adb_xihe_ads;
。在SQLConsole窗口下方的执行记录中显示执行成功。
清理及后续
3
清理
ACU时包和资源包试用时长均为1个月,超过有效期后,ACU时包和资源包剩余资源将作废。试用时长到期后集群不会自动释放,将按量计费。如果您无需继续使用,请及时释放集群。如果您需要继续使用,建议您转换为包年包月计费。具体操作,请参见转换计费方式和湖仓版(3.0)产品定价。
完成教程后,请参考以下场景处理OSS资源:
如果无需继续使用OSS Bucket,您可以登录对象存储OSS控制台,在Bucket列表页单击Bucket名称。然后在左侧导航栏,选择删除Bucket,在删除Bucket页面,单击删除Bucket,然后根据界面提示删除Bucket。
如果您需继续使用OSS Bucket,请确保余额充足或在资源包到期前及时续费。欠费后如果在延期免停权益额度内,您的服务将不会受到停服影响。欠费后如果超出了延期免停权益额度,OSS服务将自动停止。如果您在OSS停服后15天内未补足欠款,将视为您主动放弃OSS存储服务,阿里云将终止本产品服务条款并停止为您继续提供服务,您保存在阿里云的全部数据将会被清理删除,清理后数据不可恢复。
后续
总结
常用知识点
问题1:通过Spark SQL创建的外表,可以使用XIHE BSP SQL写入数据吗?(单选题)
正确答案是可以。两种作业开发方式间可以实现数据互通,仅在SQL语法上有一些区别。
问题2:使用Spark SQL进行作业开发,执行SQL语句时,只能选择继续执行吗?(单选题)
正确答案是不是。您也可以选择启动ThriftServer,SQL语句为交互式执行,资源隔离为线程级的,且需要配置Spark ThriftServer后才执行SQL语句。选择继续执行时,SQL语句为批量执行,SQL语句运行在单独的Spark应用中,可以保证资源隔离和稳定性。本次入门教程推荐使用继续执行。