教程:如何在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,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
1月前
|
存储 数据采集 大数据
Data Lake架构揭秘
Data Lake架构揭秘
33 0
|
11月前
|
存储 SQL JSON
【数据湖】在 Azure Data Lake Storage gen2 上构建数据湖
【数据湖】在 Azure Data Lake Storage gen2 上构建数据湖
|
存储 SQL 数据采集
深入剖析 Delta Lake:Schema Enforcement & Evolution
Schema 约束和 Schema 演变相互补益,合理地结合起来使用将能方便地管理好数据,避免脏数据侵染,保证数据的完整可靠。
深入剖析 Delta Lake:Schema Enforcement & Evolution
|
SQL 分布式计算 对象存储
Data Lake Analytics: 自动推断 OSS 上的 CSV 文件
截止目前,Data Lake Analytics(下面简称 DLA)已经和 OSS 有很多深度的集成,详情可以参见 DLA 的官方文档:DLA 和 OSS 整合。 为了能够提供更好的使用体验,目前可以通过 DLA 自动探测 OSS 上的多种文件格式,并自动生成建表语句,大大减少建表的使用成本。
Data Lake Analytics: 自动推断 OSS 上的 CSV 文件
|
SQL 存储 分布式计算
Data Lake 三剑客——Delta、Hudi、Iceberg 对比分析
定性上讲,三者均为 Data Lake 的数据存储中间层,其数据管理的功能均是基于一系列的 meta 文件。meta 文件的角色类似于数据库的 catalog/wal,起到 schema 管理、事务管理和数据管理的功能。
13929 2
Data Lake 三剑客——Delta、Hudi、Iceberg 对比分析
|
SQL 对象存储
Data Lake Analytics: 基于OSS文件自动推断建表
背景 用户在使用Data Lake Analytics对OSS上的数据建表时,需要预先知道目标文件的格式和schema信息。当目标文件中每条记录对应的列数很多时,需要一个个手动匹配,很不方便。 在新版的Data Lake Analytics中,支持了CREATE EXTERNAL TABLE LIKE 的语法。
1105 0
|
SQL
在Data Lake Analytics中使用视图
在Data Lake Analytics中使用视图 1. 概述 在Data Lake Analytics(以下简称DLA)中使用视图(VIEW)功能,可以大大简化对于重复SQL,特别是较为复杂的SQL语句的编写和维护。
1812 0
|
SQL 关系型数据库 数据库
阿里云Data Lake Analytics正式商业化
产品介绍: Data Lake Analytics是Serverless化的交互式联邦查询服务。无需ETL,使用标准SQL即可分析与集成对象存储(OSS)、数据库(PostgreSQL/MySQL等)、NoSQL(TableStore等)数据源的数据适用客户: 全网发布功能: 阿里云Data Lake Analytics正式商业化,无需ETL即可开启异构数据源的联邦实时分析能力。
|
SQL 关系型数据库 测试技术
Data Lake Analytics: 读/写PolarDB的数据
Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于PolarDB的支持, PolarDB 是阿里云自研的下一代关系型分布式云原生数据库,100%兼容MySQL,存储容量最高可达 100T,性能最高提升至 MySQL 的 6 倍。
2493 0

热门文章

最新文章