点击上方【蓝色】字体 关注我们

hive.optimize.cte.materialize.threshold

从源码看,在获取元数据时,会进行判断,判断配置参数大于0且cte的引用次数超过配置的参数时候则开启cte的物化。
01 CET使用
1 命令格式
WITHcte_name AS(cte_query)[,cte_name2 AS(cte_query2),……]
cte_name:CTE的名称,不能与当前 WITH
子句中的其他CTE的名称相同。查询中任何使用到cte_name标识符的地方,均指CTE。cte_query:一个 SELECT
语句。它产生的结果集用于填充CTE。
2 示例
INSERT OVERWRITE TABLE srcp PARTITION (p='abc')SELECT * FROM (SELECT a.key, b.valueFROM (SELECT * FROM src WHERE key IS NOT NULL ) aJOIN (SELECT * FROM src2 WHERE value > 0 ) bON a.key = b.key) cUNION ALLSELECT * FROM (SELECT a.key, b.valueFROM (SELECT * FROM src WHERE key IS NOT NULL ) aLEFT OUTER JOIN (SELECT * FROM src3 WHERE value > 0 ) bON a.key = b.key AND b.key IS NOT NULL)d;
witha as (select * from src where key is not null),b as (select * from src2 where value>0),c as (select * from src3 where value>0),d as (select a.key,b.value from a join b on a.key=b.key),e as (select a.key,c.value from a left outer join c on a.key=c.key and c.key is not null)insert overwrite table srcp partition (p='abc')select * from d union all select * from e;
CREATE TEMPORARY TABLE table_1 ASSELECTcolumnsFROM table A;CREATE TEMPORARY table_2 ASSELECTcolumnsFROM table B;SELECTtable_1.columns,table_2.columns,c.columnsFROM table C JOIN table_1JOIN table_2;
CTE的作法:
-- 注意Hive、Impala支持这种语法,低版本的MySQL不支持(高版本支持)WITH employee_by_title_count AS (SELECTt.name as job_title, COUNT(e.id) as amount_of_employeesFROM employees eJOIN job_titles t on e.job_title_id = t.idGROUP BY 1),salaries_by_title AS (SELECTname as job_title, salaryFROM job_titles)SELECT *FROM employee_by_title_count eJOIN salaries_by_title s ON s.job_title = e.job_title
with cte as (SELECT gw_id,sensor_id,stddev(temp) over(PARTITION by gw_id,sensor_id) as stddev_temp,stddev(humi) over(PARTITION by gw_id,sensor_id) as stddev_humi,avg(temp) over(PARTITION by gw_id,sensor_id) as avg_temp,avg(humi) over(PARTITION by gw_id,sensor_id) as avg_humiFROM phmdwdb.dwd_iot_phm_trackcir_envwhere from_unixtime(cast(substr(msg_time,1,10) AS BIGINT),'yyyy-MM-dd') = '2020-11-20')select gw_id,sensor_id,3*stddev_temp+avg_temp as temp_std_up,3*stddev_humi+avg_humi as humi_std_up,abs(3*stddev_temp-avg_temp) as temp_std_dn,abs(3*stddev_humi-avg_humi) as temp_std_dnfrom cte+----------------------+----------------------+--------------------+--------------------+---------------------+--------------------+--+| gw_id | sensor_id | temp_std_up | humi_std_up | temp_std_dn | temp_std_dn |+----------------------+----------------------+--------------------+--------------------+---------------------+--------------------+--+| 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 || 1263740609944641536 | 1329016193440047104 | 22.53016020309899 | 76.27771107659711 | 16.851530077439218 | 64.75383829654604 |
示例4:CTE in Views, CTAS, and Insert Statements
-- insert examplecreate table s1 like src;with q1 as ( select key, value from src where key = '5')from q1insert overwrite table s1select *;-- ctas examplecreate table s2 aswith q1 as ( select key from src where key = '4')select * from q1;-- view examplecreate view v1 aswith q1 as ( select key from src where key = '5')select * from q1;select * from v1;-- view example, name collisioncreate view v1 aswith q1 as ( select key from src where key = '5')select * from q1;with q1 as ( select key from src where key = '4')select * from v1;
with seq_num_tab as(select 1 as seqnumunion allselect sequnum + 1from seq_num_tabwhere seqnum <100)select seqnum from seq_num_tab
FAILED: SemanticException Recursive cte seq_num_tab detected (cycle: seq_num_tab -> seq_num_tab).
selectrow_number() over() as idfrom( select explode(split(space(99), ' '))) t ;
注意:Hive3.0后开始支持递归。
02 小 结

往期精彩
会飞的一十六
扫描右侧二维码关注我们
点个【在看】 你最好看

文章转载自会飞的一十六,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。






