Hive——巧用transform处理复杂的字符串问题

时间:2022-05-04
本文章向大家介绍Hive——巧用transform处理复杂的字符串问题,主要内容包括transform、实例、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

相比于Map-Reduce,Hive对数据的处理相对简单,但是Hive本身提供的函数,对于处理复杂的字符串问题,就显得不是很方便,此时,可以借助transform,引入外界的Python程序对字符串进行处理。

transform

transform的基本用法为:

transform中的值作为输入, 然后传递给python脚本,最后经过python的处理后,输出想要得到的字符串格式。

transform的基本语法为:

select transform(intput columns)
using 'python *.py'
as (output columns)

注意:在利用本地的python处理时,首先需要add file *.py;

实例

假设目前我们有如下的一些数据:

需要取出以分号“;”分隔的倒数第二位。实际的代码如下:

  • Hive的代码:
function create_table(){
    sql_create_table_1="drop table if exists ${table_name_deal};
    create table if not exists ${table_name_deal}(
    deal string
    )
    row format delimited fields terminated by 't'
    lines terminated by 'n'
    stored as rcfile
    location '${table_path}/${table_name_deal}';"
    hive -e"${sql_create_table_1}"

}

function data_deal(){
    deal_sql="add file deal.py;
    insert overwrite table ${table_name_deal}
    select a.deal
    from
    (select transform(match_id)
                using 'python deal.py'
                as (deal)
                from ${table_name_sel}
            ) a;"

    hive -e"${deal_sql}"
}
  • python脚本
#!/usr/bin/python
#coding:UTF-8

import sys

for line in sys.stdin:
    lines = line.strip().split(";")
    if len(lines) < 10:
        continue

    deal = lines[-2]
    print deal