hiveSql学习

1、如何将多字段拼接成一个字段,并且排除原始表中的某些字段
(user_pin)?+.+就是不需要user_pin字段,属于高阶用法

insert overwrite table user_table partition(dt='2020-11-21')
select user_pin, a.`(dt)?+.+`, b.`(user_pin)?+.+`
from 
    user_table a
left join (
    select 
        user_pin, 
        concat_ws(';', collect_list(user_item_imp_cnt_30d)) as user_item_imp_cnt_30d,
        concat_ws(';', collect_list(user_item_imp_cnt_7d)) as user_item_imp_cnt_7d,
        concat_ws(';', collect_list(user_item_imp_cnt_3d)) as user_item_imp_cnt_3d,
        concat_ws(';', collect_list(user_item_click_cnt_30d)) as user_item_click_cnt_30d,
        concat_ws(';', collect_list(user_item_click_cnt_7d)) as user_item_click_cnt_7d,
        concat_ws(';', collect_list(user_item_click_cnt_3d)) as user_item_click_cnt_3d,
        concat_ws(';', collect_list(user_item_click_rate_30d)) as user_item_click_rate_30d,
        concat_ws(';', collect_list(user_item_click_rate_7d)) as user_item_click_rate_7d,
        concat_ws(';', collect_list(user_item_click_rate_3d)) as user_item_click_rate_3d,
        concat_ws(';', collect_list(user_item_click_days_30d)) as user_item_click_days_30d,
        concat_ws(';', collect_list(user_item_lst_click_days_30d)) as user_item_lst_click_days_30d
    from (
        select 
            user_pin,  
            concat(rescode, ':', user_item_imp_cnt_30d) as user_item_imp_cnt_30d,
            concat(rescode, ':', user_item_imp_cnt_7d) as user_item_imp_cnt_7d,
            concat(rescode, ':', user_item_imp_cnt_3d) as user_item_imp_cnt_3d,
            concat(rescode, ':', user_item_click_cnt_30d) as user_item_click_cnt_30d,
            concat(rescode, ':', user_item_click_cnt_7d) as user_item_click_cnt_7d,
            concat(rescode, ':', user_item_click_cnt_3d) as user_item_click_cnt_3d,
            concat(rescode, ':', user_item_click_rate_30d) as user_item_click_rate_30d,
            concat(rescode, ':', user_item_click_rate_7d) as user_item_click_rate_7d,
            concat(rescode, ':', user_item_click_rate_3d) as user_item_click_rate_3d,
            concat(rescode, ':', user_item_click_days_30d) as user_item_click_days_30d,
            concat(rescode, ':', user_item_lst_click_days_30d) as user_item_lst_click_days_30d
        from dmc_qm.dmcqm_lhmx_new_cms_recmd_user_item_fea_s_d
        where dt='2020-11-21'
    ) t
    group by user_pin
) b
on a.user_pin = b.user_pin and a.dt='2020-11-21'

2、将字符串拆成多列
select count(1) from (select explode(split(data, ‘,’)) from dmc_bc.dmcbc_ust_dmc_bc_bx_feed_rand_recall_result_s_d where dt=‘2020-12-06’) t
3、hive函数
https://www.cnblogs.com/end/archive/2012/06/18/2553682.html

### Hive SQL 学习教程与使用指南 Hive SQL 是一种基于 Apache Hive 的查询语言,它允许用户在大规模数据集上执行类似于传统 SQL 的操作。以下是关于 Hive SQL 的学习教程和使用指南的详细内容。 #### 1. 基础概念 Hive SQL 是一种用于大数据处理的工具,它支持结构化数据的存储、查询和分析。其核心功能包括: - **创建数据库**:用于组织和管理表[^2]。 - **创建表**:定义数据结构并指定存储格式。 - **插入数据**:将数据加载到表中。 - **查询数据**:通过 SQL 查询语句提取和分析数据。 - **删除表**:清理不再需要的数据表。 #### 2. 表创建与数据插入 在实际应用中,创建表和插入数据是 Hive SQL 的基础操作。以下是一个简单的示例: ```sql -- 创建表 CREATE TABLE employee ( id INT, name STRING, salary FLOAT ) STORED AS ORC TBLPROPERTIES ('orc.compress'='SNAPPY'); -- 插入数据 INSERT INTO employee VALUES (1, 'Alice', 5000.0), (2, 'Bob', 6000.0); ``` 上述代码展示了如何创建一个名为 `employee` 的表,并插入两条记录[^1]。 #### 3. 数据查询 Hive SQL 支持复杂的查询操作,例如条件过滤、分组统计和连接查询等。以下是一些常见用法: - **条件过滤**:使用 `WHERE` 子句筛选符合条件的记录。 - **分组统计**:使用 `GROUP BY` 和聚合函数(如 `COUNT`、`SUM`)进行统计分析。 - **连接查询**:通过 `JOIN` 操作合并多个表的数据。 示例代码如下: ```sql -- 条件过滤 SELECT * FROM employee WHERE salary > 5500.0; -- 分组统计 SELECT department, COUNT(*) AS num_employees FROM employee GROUP BY department; -- 连接查询 SELECT e.name, d.department_name FROM employee e JOIN department d ON e.department_id = d.id; ``` #### 4. 性能优化 为了提高查询效率,可以采用以下优化策略[^3]: - **压缩存储**:使用 `ORC` 格式存储数据,并启用压缩算法(如 `SNAPPY`)。 - **索引加速**:为常用查询字段创建索引,例如 Bloom Filter 索引。 - **分区与分桶**:根据业务需求对数据进行分区或分桶,减少扫描范围。 #### 5. 高级功能 Hive SQL 还支持一些高级功能,例如窗口函数和复杂类型处理。以下是一个窗口函数的示例: ```sql -- 使用窗口函数计算累计销售额 SELECT user_id, login_date, SUM(sales) OVER (PARTITION BY user_id ORDER BY login_date) AS cumulative_sales FROM sales_data; ``` 此外,对于连续登录问题,可以通过间隔标记法实现高效的统计分析[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值