前言

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所指目录下的子目录或者文件。

更多文章


本文作者:金络

原文链接

本文为云栖社区原创内容,未经允许不得转载。

如何在Data Lake Analytics中使用临时表的更多相关文章

  1. Data Lake Analytics中OSS LOCATION的使用说明

    前言 Data Lake Analytic(后文简称 DLA)可以帮助用户通过标准的SQL语句直接对存储在OSS.TableStore上的数据进行查询分析. 在查询前,用户需要根据数据文件的格式和内容 ...

  2. 如何使用Data Lake Analytics创建分区表

    前言 Data Lake Analytics(后文简称DLA)提供了无服务化的大数据分析服务,帮助用户通过标准的SQL语句直接对存储在OSS.TableStore上的数据进行查询分析. 在关系型数据库 ...

  3. Data Lake Analytics的Geospatial分析函数

    0. 简介 为满足部分客户在云上做Geometry数据的分析需求,阿里云Data Lake Analytics(以下简称:DLA)支持多种格式的地理空间数据处理函数,符合Open Geospatial ...

  4. Data Lake Analytics + OSS数据文件格式处理大全

    0. 前言 Data Lake Analytics是Serverless化的云上交互式查询分析服务.用户可以使用标准的SQL语句,对存储在OSS.TableStore上的数据无需移动,直接进行查询分析 ...

  5. Data Lake Analytics,大数据的ETL神器!

    0. Data Lake Analytics(简称DLA)介绍 数据湖(Data Lake)是时下大数据行业热门的概念:https://en.wikipedia.org/wiki/Data_lake. ...

  6. Data Lake Analytics: 使用DataWorks来调度DLA任务

    DataWorks作为阿里云上广受欢迎的大数据开发调度服务,最近加入了对于Data Lake Analytics的支持,意味着所有Data Lake Analytics的客户可以获得任务开发.任务依赖 ...

  7. 使用Data Lake Analytics + OSS分析CSV格式的TPC-H数据集

    0. Data Lake Analytics(DLA)简介 关于Data Lake的概念,更多阅读可以参考:https://en.wikipedia.org/wiki/Data_lake 以及AWS和 ...

  8. Data Lake Analytics账号和权限体系详细介绍

    一.Data Lake Analytics介绍 数据湖(Data Lake)是时下大数据行业热门的概念:https://en.wikipedia.org/wiki/Data_lake.基于数据湖做分析 ...

  9. 使用Data Lake Analytics读/写RDS数据

    Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于RDS(目前支持 MySQL , SQLServer ,Postgres 引擎)的支持, 这篇教程带你玩转 DLA 的 R ...

随机推荐

  1. OpenCV cvReleaseImage把图像怎么样了?

         cvReleaseImage(img)和free.delete相同,只是把该指针img所指的内存给释放掉,但并没有把img指针本身干掉,其地址仍然不变(非NULL),只是该地址对应的内存是垃 ...

  2. IO流19(完) --- RandomAccessFile实现数据的插入 --- 技术搬运工(尚硅谷)

    原hello.txt文件中的内容:abcdefghijklmn 想要实现的效果是,将xyz插入到abc后面,将文件内容变成:abcxyzdefghijklmn @Test public void te ...

  3. springmvc:配置解决中文乱码的过滤器

    在web.xml中配置以下内容: <!--配置解决中文乱码过滤器--> <filter> <filter-name>characterEncodingFilter& ...

  4. 如何修改MyEclipse的SVN账户和密码

    如何修改MyEclipse的SVN账户和密码呢? 操作方法:删除C:\Users\Administrator\AppData\Roaming\Subversion\auth\svn.simple文件夹 ...

  5. bzoj 4241 历史研究——分块(区间加权众数)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4241 套路:可以大力预处理,如果求区间加权众数,可以预处理i~j块(或 j 位置)的最大值, ...

  6. loj2544 「JXOI2018」游戏

    https://loj.ac/problem/2544 自己太傻,一遇到有关数学的题就懵逼,这种简单题竟然还得靠NicoDafaGood 在$[l,r]$这个区间内,如果没有数是$x$的因数,我们称$ ...

  7. Thinkphp 错误集锦

    1.无法加载控制器 开始还跑TP核心文件中找错误,结果没找到什么结果.最后还是用程序新建模块才发现问题. 问题是命名空间名字写错了.比如书:本来是Report模块下的IndexContrller,但是 ...

  8. memcache缓存使用详解

    初始化一个Memcache的对象:$mem = new Memcache(); 连接到我们的Memcache服务器端,第一个参数是服务器的IP地址,也可以是主机名,第二个参数是Memcache的开放的 ...

  9. linux把普通用户添加到sudo组

    一.linux下把普通用户添加到sudo组的方式: 1. root权限下, 先cd到/etc目录下 2. 由于sudoers文件为只读权限,所以需要添加写入权限,chmod u+w sudoers 3 ...

  10. 在Vmware安装虚拟机WindowsServer 2003

    一.创建并安装虚拟机 新建Windows2003server系统 按照下面操作即可 https://www.cnblogs.com/color-blue/p/8525710.html 二.安装虚拟机 ...