教程:如何在Data Lake Analytics中使用临时表

简介: 前言 Data Lake Analytics (后文简称DLA)是阿里云重磅推出的一款用于大数据分析的产品,可以对存储在OSS,OTS上的数据进行查询分析。相较于传统的数据分析产品,用户无需将数据重新加载至DLA,只需在DLA中创建一张与数据源关联的表,不仅简化了分析过程,还节约了存储成本,是做大数据分析的不二之选。

前言

Data Lake Analytics (后文简称DLA)是阿里云重磅推出的一款用于大数据分析的产品,可以对存储在OSS,OTS上的数据进行查询分析。相较于传统的数据分析产品,用户无需将数据重新加载至DLA,只需在DLA中创建一张与数据源关联的表,不仅简化了分析过程,还节约了存储成本,是做大数据分析的不二之选。

当用户想通过DLA对OSS上的某个文件或者目录进行查询时,第一步需要先针对该文件或目录在DLA中创建一个table。当查询结束后,如果该table将不再使用,需要用户手动执行drop命令进行清理。

在实际应用的某些场景中,有些table只在查询中使用一次即可,但每次使用都要手动建表删表。这时,用户可以选择使用DLA的临时表。该表的生命周期仅限于一条查询语句,当查询结束后,临时表将被自动删除。

本文将以OSS数据源为例,重点介绍如何在查询语句中定义和使用临时表。

临时表

在DLA中,用户可以在查询SQL中嵌入建表语句(即,对临时表的定义),从而对嵌入的临时表进行查询。

示例1:查询中只包含一个临时表,且建表语句相对简单。

SELECT col1, col2 FROM
TABLE temp_1
(
  col1 int,
  col2 string
)
LOCATION 'oss://test-bucket-for-dla/tbl1_part/kv1.txt'

-- 等效于 ->

CREATE EXTERNAL TABLE temp_1
(
  col1 int,
  col2 int
)
LOCATION 'oss://test-bucket-for-dla/tbl1_part/kv1.txt';

SELECT col1, col2 FROM temp_1;

示例2:查询中只含有一个临时表,建表语句中需要指定ROW FORMAT以及TBLPROPERITES。

SELECT id, string_col FROM
TABLE temp_2
(
    id INT COMMENT 'default',
    string_col STRING COMMENT 'default'
) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 'oss://test-bucket-for-dla/tbl1_part/kv1.txt'
TBLPROPERTIES ('recursive.directories'='false');

-- 等效于 ->

CREATE EXTERNAL TABLE temp_2
(
    id INT COMMENT 'default',
    string_col STRING COMMENT 'default'
) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 'oss://test-bucket-for-dla/tbl1_part/kv1.txt'
TBLPROPERTIES ('recursive.directories'='false');

SELECT id, string_col from temp_2;

示例3:建表语句中含有多个临时表

SELECT temp_1.col1, temp_2.smallint_col
FROM 
TABLE temp_1
(
  col1 int,
  col2 int
)
LOCATION 'oss://test-bucket-for-dla/tbl1_part/kv1.txt';

JOIN

TABLE temp_2
(
    id INT COMMENT 'default',
    bool_col BOOLEAN COMMENT 'default',
    tinyint_col TINYINT COMMENT 'default',
    smallint_col SMALLINT COMMENT 'default',
    int_col INT COMMENT 'default',
    bigint_col BIGINT COMMENT 'default',
    float_col FLOAT COMMENT 'default',
    double_col DOUBLE COMMENT 'default',
    date_string_col STRING COMMENT 'default',
    string_col STRING COMMENT 'default',
    timestamp_col TIMESTAMP COMMENT 'default'
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES ('field.delim'='|', 'serialization.format'='|') 
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 'oss://test-bucket-for-dla/tbl2/tbl2.csv'
TBLPROPERTIES ('recursive.directories'='false')

ON temp_1.col1 = temp_2.id
WHERE temp_2.bool_col = true;

-- 等价于 ->

CREATE EXTERNAL TABLE temp_1
(
  col1 int,
  col2 int
)
LOCATION 'oss://test-bucket-for-dla/tbl1_part/kv1.txt';

CREATE EXTERNAL TABLE temp_2
(
    id INT COMMENT 'default',
    bool_col BOOLEAN COMMENT 'default',
    tinyint_col TINYINT COMMENT 'default',
    smallint_col SMALLINT COMMENT 'default',
    int_col INT COMMENT 'default',
    bigint_col BIGINT COMMENT 'default',
    float_col FLOAT COMMENT 'default',
    double_col DOUBLE COMMENT 'default',
    date_string_col STRING COMMENT 'default',
    string_col STRING COMMENT 'default',
    timestamp_col TIMESTAMP COMMENT 'default'
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES ('field.delim'='|', 'serialization.format'='|') 
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 'oss://test-bucket-for-dla/tbl2/tbl2.csv'
TBLPROPERTIES ('recursive.directories'='false');

SELECT temp_1.col1, temp_2.smallint_col
FROM 
temp_1
JOIN
temp_2
ON temp_1.col1 = temp_2.id
WHERE temp_2.bool_col = true;

适用场景

当OSS的目录下有数量较多的数据文件,这些文件的目录结构如下:

oss://test-bucket-for-dla/mytable/data1.csv
oss://test-bucket-for-dla/mytable/data2.csv
...
oss://test-bucket-for-dla/mytable/dataN.csv
  1. 目录mytable下的所有文件有着相同的数据结构,即表结构相同
  2. 每次SQL查询只针对一个文件,即dataN.csv

此时,用户可以考虑使用临时表进行查询,每次只需替换SQL中临时表的LOCATION路径值即可。

注意事项

  1. 在一条查询语句中的多个临时表,其表名不能相同,需要在该查询语句中具有唯一性;
  2. 在执行查询前,需要先选定一个database,可以执行 use ;
  3. 临时表的路径需要是当前database所指目录下的子目录或者文件。

更多文章

相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
目录
相关文章
|
5月前
|
数据采集 并行计算 算法
灰狼算法优化的LSSVR程序
使用灰狼优化算法(GWO)优化最小二乘支持向量回归(LSSVR)参数的MATLAB实现
142 1
|
机器学习/深度学习 传感器 人工智能
AI与未来医疗:重塑健康管理新格局随着人工智能(AI)技术的飞速发展,医疗行业正迎来一场前所未有的变革。AI不仅在数据分析、诊断支持方面展现出巨大潜力,还在个性化治疗、远程医疗等多个领域实现了突破性进展。本文将探讨AI技术在医疗领域的具体应用及其对未来健康管理的影响。
人工智能(AI)正在彻底改变医疗行业的面貌。通过深度学习算法和大数据分析,AI能够迅速分析海量的医疗数据,提供精准的诊断和治疗建议。此外,AI在远程医疗、药物研发以及患者管理等方面也展现出了巨大的潜力。本文将详细探讨这些技术的应用实例,并展望其对健康管理的深远影响。
1226 28
|
10月前
|
文字识别 测试技术 开发者
Qwen3-VL新成员 2B、32B来啦!更适合开发者体质
Qwen3-VL家族重磅推出2B与32B双版本,轻量高效与超强推理兼备,一模型通吃多模态与纯文本任务!
7777 12
|
存储 编解码
LabVIEW编程LabVIEW控制picoharp 300例程与相关资料
LabVIEW编程LabVIEW控制picoharp 300例程与相关资料
181 0
|
Rust 安全 JavaScript
Java的7大好处
1995 年最初关于 Java 的 7 大优势的白皮书实际上说“Java 是解释型和动态型”,但在 1997 年不再如此。相反,我们可以说它是“静态类型化和编译型”。
699 0
|
存储 缓存 小程序
小程序---本地存储的方法
我们在开发的过程中,常常会用到本地存储,下面我给大家分享一下微信本地存储的使用。 一、数据支持需要存储的内容。只支持原生类型、Date、及能够通过JSON.stringify序列化的对象。 二、方法1、同步(1)wx.
1889 0
|
7天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
1744 117
|
8天前
|
人工智能 程序员 API
Codex 接入 DeepSeek-V4-Flash:还能补上识图,提供两套方案
Codex 接入 DeepSeek-V4-Flash 怎么配?本文覆盖 CLI 与桌面端,再用 qwen3-vl-flash 补识图,两套方案可直接照做
1233 9