相关疑难解决方法(0)

在配置单元中生成星型模式

我来自SQL Datawarehouse世界,从平面Feed我生成维度和事实表.在一般数据仓库项目中,我们将Feed分为事实和维度.例如:

在此输入图像描述

我是Hadoop的新手,我开始知道我可以在hive中构建数据仓库.现在,我熟悉使用guid,我认为它适用于蜂巢中的主键.那么,下面的策略是在hive中加载事实和维度的正确方法?

  1. 将源数据加载到配置单元表中; 比方说Sales_Data_Warehouse
  2. 从sales_data_warehouse生成维度; 例如:

    从Sales_Data_Warehouse中选择New_Guid(),Customer_Name,Customer_Address

  3. 完成所有维度后,再加载事实表

    SELECT New_Guid()AS'Fact_Key',Customer.Customer_Key,Store.Store_Key ... FROM Sales_Data_Warehouse AS'source'JOIN Customer_Dimension Customer on source.Customer_Name = Customer.Customer_Name AND source.Customer_Address = Customer.Customer_Address JOIN Store_Dimension AS'Store' ON Store.Store_Name = Source.Store_Name JOIN Product_Dimension AS'Product'ON .....

这是我应该在hive中加载我的事实和维度表的方式吗?

此外,在一般仓库项目中,我们需要更新维度属性(例如:Customer_Address更改为其他内容)或者必须更新事实表外键(很少,但它确实发生).那么,如何在hive中加载INSERT-UPDATE.(就像我们在SSIS中查找或在TSQL中使用MERGE语句一样)?

hadoop hive data-warehouse dimensional-modeling fact

10
推荐指数
1
解决办法
2623
查看次数

使用hive的merge语句将delta数据合并到外部表中

我有一个映射在Hive(EMR-5.11.0上的v2.3.2)的外部表,我需要每周更新一次新数据.合并包含条件upsert语句.

表的位置在s3中,数据始终存在(创建一次,我们只需要用新数据更新它).

我已经阅读了这篇博客,关于在事务表(https://dzone.com/articles/update-hive-tables-the-easy-way-part-2-hortonworks)上使用ACID功能在Hive中合并数据,但是我可以看到,唯一的解决方案是将我的外部表复制到临时Hive内部表,即集群和事务,然后只在该表上我可以进行合并并使用新的合并后覆盖我的原始数据.

这个表非常大(大约10GB的数据),所以我想避免在每次合并操作之前复制它.

有没有办法创建内部表并将其映射到现有数据?还是有另一种方法,除了合并语句,在Hive外部表上执行upsert?

非常感谢提前!

hadoop hive acid emr orc

7
推荐指数
1
解决办法
1097
查看次数

相当于 HIVE 查询中的 MERGE

我有以下 SQL 查询:

MERGE INTO member_staging x
USING (SELECT member_id, first_name, last_name, rank FROM members) y
ON (x.member_id  = y.member_id)
WHEN MATCHED THEN
    UPDATE SET x.first_name = y.first_name, 
                        x.last_name = y.last_name, 
                        x.rank = y.rank
    WHERE x.first_name <> y.first_name OR 
           x.last_name <> y.last_name OR 
           x.rank <> y.rank 
WHEN NOT MATCHED THEN
    INSERT(x.member_id, x.first_name, x.last_name, x.rank)  
    VALUES(y.member_id, y.first_name, y.last_name, y.rank);
Run Code Online (Sandbox Code Playgroud)

我想在 Hive 查询中实现它,HIVE 中是否有 MERGE JOIN 的等效项?

sql hive hiveql

2
推荐指数
1
解决办法
4849
查看次数

如何在 Hive 0.13 中更新表?

我的 Hive 版本是 0.13。我有两张桌子,table_1还有table_2

table_1 包含:

customer_id | items | price | updated_date
------------+-------+-------+-------------
10          | watch | 1000  | 20170626
11          | bat   | 400   | 20170625
Run Code Online (Sandbox Code Playgroud)

table_2 包含:

customer_id | items    | price | updated_date
------------+----------+-------+-------------
10          | computer | 20000 | 20170624
Run Code Online (Sandbox Code Playgroud)

我想更新它table_2是否customer_id已经存在的记录,如果没有,它应该附加到table_2.

由于 Hive 0.13 不支持更新,我尝试使用 join,但失败了。

hadoop hive acid hiveql

1
推荐指数
1
解决办法
1168
查看次数

标签 统计

hive ×4

hadoop ×3

acid ×2

hiveql ×2

data-warehouse ×1

dimensional-modeling ×1

emr ×1

fact ×1

orc ×1

sql ×1