如何创建 Hive 派生表?

How to create Hive Derived Tables?

什么是 hive 派生 table,如何创建它以及何时使用它?

是否应该使用相同的 CREATE TABLE 语句创建?

例如,对于这个小学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 ',' ;

如何创建派生的 table 来聚合和执行一些 max/min 功能?

hive derived tables - 是子查询的奇特名称或常见的 table 表达式。它不是物理的 table 但可以像配置单元查询语言中的 table 一样工作,这就是名称的原因。因此,您了解 Hive 派生的 table 是在查询中使用额外的 SELECT 动态构建的。他们使用临时 space 并在查询执行完成后立即丢弃。

例如,您想将销售额转换为多种货币,您可以使用以下查询,我在派生的 table 中获取所有汇率,然后计算美元、欧元或印度卢比的汇率。
使用 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'

使用子查询 - 您也可以使用子查询编写相同的查询,如下所示。这也将创建派生 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 (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'