如何创建 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'
什么是 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'