如何在Data Lake Analytics中使用临时表
前言
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
- 目录mytable下的所有文件有着相同的数据结构,即表结构相同
 - 每次SQL查询只针对一个文件,即dataN.csv
 
此时,用户可以考虑使用临时表进行查询,每次只需替换SQL中临时表的LOCATION路径值即可。
注意事项
- 在一条查询语句中的多个临时表,其表名不能相同,需要在该查询语句中具有唯一性;
 - 在执行查询前,需要先选定一个database,可以执行 use ;
 - 临时表的路径需要是当前database所指目录下的子目录或者文件。
 
更多文章
- Data Lake Analytics + OSS数据文件格式处理大全:https://yq.aliyun.com/articles/623246
 - Data Lake Analytics中OSS LOCATION的使用说明:https://yq.aliyun.com/articles/623247
 - 如何使用Data Lake Analytics创建分区表:https://yq.aliyun.com/articles/624151
 - 基于Data Lake Analytics来分析OTS上的数据:https://yq.aliyun.com/articles/618501
 - 使用Data Lake Analytics从OSS清洗数据到AnalyticDB:https://yq.aliyun.com/articles/623401
 - 使用Data Lake Analytics读/写RDS数据:https://yq.aliyun.com/articles/629046
 
本文作者:金络
本文为云栖社区原创内容,未经允许不得转载。
如何在Data Lake Analytics中使用临时表的更多相关文章
- Data Lake Analytics中OSS LOCATION的使用说明
		
前言 Data Lake Analytic(后文简称 DLA)可以帮助用户通过标准的SQL语句直接对存储在OSS.TableStore上的数据进行查询分析. 在查询前,用户需要根据数据文件的格式和内容 ...
 - 如何使用Data Lake Analytics创建分区表
		
前言 Data Lake Analytics(后文简称DLA)提供了无服务化的大数据分析服务,帮助用户通过标准的SQL语句直接对存储在OSS.TableStore上的数据进行查询分析. 在关系型数据库 ...
 - Data Lake Analytics的Geospatial分析函数
		
0. 简介 为满足部分客户在云上做Geometry数据的分析需求,阿里云Data Lake Analytics(以下简称:DLA)支持多种格式的地理空间数据处理函数,符合Open Geospatial ...
 - Data Lake Analytics + OSS数据文件格式处理大全
		
0. 前言 Data Lake Analytics是Serverless化的云上交互式查询分析服务.用户可以使用标准的SQL语句,对存储在OSS.TableStore上的数据无需移动,直接进行查询分析 ...
 - Data Lake Analytics,大数据的ETL神器!
		
0. Data Lake Analytics(简称DLA)介绍 数据湖(Data Lake)是时下大数据行业热门的概念:https://en.wikipedia.org/wiki/Data_lake. ...
 - Data Lake Analytics: 使用DataWorks来调度DLA任务
		
DataWorks作为阿里云上广受欢迎的大数据开发调度服务,最近加入了对于Data Lake Analytics的支持,意味着所有Data Lake Analytics的客户可以获得任务开发.任务依赖 ...
 - 使用Data Lake Analytics + OSS分析CSV格式的TPC-H数据集
		
0. Data Lake Analytics(DLA)简介 关于Data Lake的概念,更多阅读可以参考:https://en.wikipedia.org/wiki/Data_lake 以及AWS和 ...
 - Data Lake Analytics账号和权限体系详细介绍
		
一.Data Lake Analytics介绍 数据湖(Data Lake)是时下大数据行业热门的概念:https://en.wikipedia.org/wiki/Data_lake.基于数据湖做分析 ...
 - 使用Data Lake Analytics读/写RDS数据
		
Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于RDS(目前支持 MySQL , SQLServer ,Postgres 引擎)的支持, 这篇教程带你玩转 DLA 的 R ...
 
随机推荐
- 【核心核心】8.Spring【AOP】注解方式
			
1.引入jar包 sprig框架基础包+JUntil整合包+日志包+AOP包 spring的传统AOP的开发的包 spring-aop-4.2.4.RELEASE.jar com.springsour ...
 - iotop实时监控磁盘io
			
介绍 Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦. iotop 是一个用来监视磁盘 I/O 使用状况 ...
 - mysql导出某张表的部分数据
			
.使用into outfile '保存到操作系统的外部文件路径' mysql -uroot -p123456 -hhostname -P3306 select column_name_list fro ...
 - centos 重新编译php
			
说明:系统原来通过源码安装了php7.1.0.网上找了很多彻底删除原来php的办法,执行命令php -v PHP版本信息始终都在,说明方法都无用.自己大胆做了如下尝试,成功重新编译php 查找php ...
 - vector容量器的应用
			
vector容器的应用,感觉最近做的题目还用的挺多 vector与常用数组大部分是相同的,可以进行插入,删除之类的,但是,有些题目,用普通的数组就很容易爆掉,而vector可以动态的根据你所需要的来调 ...
 - LINUX运行级别的原理
			
在目录 /etc/rc.d/init.d 下有许多服务器脚本程序,一般称为服务(service), 在 /etc/rc.d 下有 7 个名为 rcN.d 的目录,其中 N=0-6,对应于系统的 7 个 ...
 - String and Times
			
String and Times 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Now you have a string consists of uppercase letters, ...
 - 洛谷P4022 熟悉的文章
			
题意:给定一个串集合s,每次给定一个串t,询问一个最大的L,使得存在一种划分能把t划分成若干个子串, 其中好的子串总长不小于0.9|t|.好的子串定义为长度不小于L且是s中某一个串的子串. 解:发现这 ...
 - jnhs-netbeans maven Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.4.1:clean (default-clean) on project
			
w 无法完成清理 出现这种错误,通常是由于启动了另一个tomcat 进程或者运行的javaw.exe进程,导致报错. 直接运行工程启动后再清理就好了 或者 重启大法
 - @at-root和#{&}结合
			
Sass有脚本模式#{},他和&不同之处是,&只用作选择器,它只能出现在一个复合的开始选择器,类似于一个类型选择器,如a或者h1.但#{}他表示的是一个插值,它可以用在任何地方.同样的 ...