如何创建 Hive 派生表?
Posted
技术标签:
【中文标题】如何创建 Hive 派生表?【英文标题】:How to create Hive Derived Tables? 【发布时间】:2021-05-12 23:07:26 【问题描述】:什么是hive派生表,如何创建以及何时使用?
是否应该使用相同的CREATE TABLE
语句创建它?
例如,关于这个主表
CREATE TABLE NYSE (`exchange` STRING, stock_symbol STRING, stock_date DATE, stock_price_open FLOAT, stock_price_high FLOAT, stock_price_low FLOAT, stock_price_close FLOAT, stock_volume INT, stock_price_avg_close FLOAT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
如何创建派生表来聚合和做一些最大/最小功能?
【问题讨论】:
【参考方案1】:hive derived tables
- 是子查询的花哨名称或公用表表达式。它不是物理表,但可以像配置单元查询语言中的表一样工作,这就是名称的原因。因此,您了解,Hive 派生表是使用查询中的附加 SELECT 动态构建的。它们使用临时空间并在查询执行完成后立即丢弃。
例如,您想将销售额转换为多种货币,您可以在下面的查询中使用,我在派生表中获取所有汇率,然后计算美元、欧元或印度卢比的汇率。 使用 CTE -
WITH CTE_EX_RATE as (select ex_rate, from_currency, to_currency from ex_rate_table)
select
sales_id,
ex.ex_rate * sales_amount sales_usd ,
ex_eur.ex_rate * sales_amount sales_eur,
ex_inr.ex_rate * sales_amount sales_inr
from sales s
left join CTE_EX_RATE ex on ex.from_currency = s.transaction_currency and ex.to_currency = 'USD'
left join CTE_EX_RATE ex_eur on ex_eur.from_currency = s.transaction_currency and ex_eur.to_currency = 'EUR'
left join CTE_EX_RATE ex_eur on ex_inr.from_currency = s.transaction_currency and ex_inr .to_currency = 'INR'
使用子查询 - 您也可以使用子查询编写相同的查询,如下所示。这也将创建派生表。
select
sales_id,
ex.ex_rate * sales_amount sales_usd ,
ex_eur.ex_rate * sales_amount sales_eur,
ex_inr.ex_rate * sales_amount sales_inr
from sales s
left join (select ex_rate, from_currency, to_currency from ex_rate_table) ex on ex.from_currency = s.transaction_currency and ex.to_currency = 'USD'
left join (select ex_rate, from_currency, to_currency from ex_rate_table) ex_eur on ex_eur.from_currency = s.transaction_currency and ex.to_currency = 'EUR'
left join (select ex_rate, from_currency, to_currency from ex_rate_table) ex_eur on ex_inr.from_currency = s.transaction_currency and ex_inr.to_currency = 'INR'
【讨论】:
澄清一下,sales
是您的物理表,而您的 ex_rate_table
是您的派生表(临时)?
是的,sales
是物理表,ex_rate_table
也是物理表。但是CTE_EX_RATE
是第一个 SQL 中的派生表。在第二种情况下,ex_eur
, 'ex','ex_inr' 是派生表。以上是关于如何创建 Hive 派生表?的主要内容,如果未能解决你的问题,请参考以下文章