教程:如何在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搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
存储 SQL JSON
【数据湖】在 Azure Data Lake Storage gen2 上构建数据湖
【数据湖】在 Azure Data Lake Storage gen2 上构建数据湖
|
OLAP 分布式数据库 Apache
《Apache Kylin on HBase extreme OLAP for big data》电子版地址
Apache Kylin on HBase: extreme OLAP for big data
106 0
《Apache Kylin on HBase extreme OLAP for big data》电子版地址
|
SQL 存储 分布式计算
Data Lake 三剑客——Delta、Hudi、Iceberg 对比分析
定性上讲,三者均为 Data Lake 的数据存储中间层,其数据管理的功能均是基于一系列的 meta 文件。meta 文件的角色类似于数据库的 catalog/wal,起到 schema 管理、事务管理和数据管理的功能。
15835 2
Data Lake 三剑客——Delta、Hudi、Iceberg 对比分析
|
SQL 分布式计算 对象存储
Data Lake Analytics: 自动推断 OSS 上的 CSV 文件
截止目前,Data Lake Analytics(下面简称 DLA)已经和 OSS 有很多深度的集成,详情可以参见 DLA 的官方文档:DLA 和 OSS 整合。 为了能够提供更好的使用体验,目前可以通过 DLA 自动探测 OSS 上的多种文件格式,并自动生成建表语句,大大减少建表的使用成本。
Data Lake Analytics: 自动推断 OSS 上的 CSV 文件
|
SQL NoSQL 关系型数据库
教程:使用Data Lake Analytics读/写MongoDB数据
Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于MongoDB 的支持, 这篇教程带你玩转 DLA 的 MongoDB 支持。 创建数据库 在 DLA 里面创建一个底层映射到 MongoDB 的外表的语法如下: CREATE DATABASE `mongo_test`.
2883 0
教程:使用Data Lake Analytics读/写MongoDB数据
|
存储 SQL 数据采集
深入剖析 Delta Lake:Schema Enforcement & Evolution
Schema 约束和 Schema 演变相互补益,合理地结合起来使用将能方便地管理好数据,避免脏数据侵染,保证数据的完整可靠。
深入剖析 Delta Lake:Schema Enforcement & Evolution
|
SQL JSON 定位技术
Data Lake Analytics的Geospatial分析函数
0. 简介 为满足部分客户在云上做Geometry数据的分析需求,阿里云Data Lake Analytics(以下简称:DLA)支持多种格式的地理空间数据处理函数,符合Open Geospatial Consortium’s (OGC) OpenGIS规范,支持的常用数据格式包括: WKT WKB GeoJson ESRI Geometry Object Json ESRI Shape DLA采用4326坐标系标准,EPSG 4326使用经纬度坐标,属于地理坐标系。
1969 0
|
SQL NoSQL 关系型数据库
如何在阿里云上使用Data Lake Analytics分析Table Store数据
数据湖(Data Lake)是时下大数据行业热门的概念:https://en.wikipedia.org/wiki/Data_lake。基于数据湖做分析,可以不用做任何ETL、数据搬迁等前置过程,实现跨各种异构数据源进行大数据关联分析,从而极大的节省成本和提升用户体验。
5925 0
如何在阿里云上使用Data Lake Analytics分析Table Store数据
|
SQL 存储 大数据
OLAP on TableStore:基于Data Lake Analytics的Serverless SQL大数据分析
TableStore(简称OTS)是阿里云的一款分布式表格系统,为用户提供schema-free的分布式表格服务。随着越来越多用户对OLAP有强烈的需求,我们提供在表格存储上接入Data Lake Analytics(简称DLA)服务的方式,提供一种快速的OLAP解决方案。
7480 0