hive如何实现oracle的connect by prior函数

Hive中如何实现层级查询 类似oracle中 connect by prior 实现的效果? - 知乎

大佬写的很详细,有兴趣自己看,但是存在一个问题

create table test.emp
(
    empno    string,
    ename    string,
    job      string,
    mgr      string,
    hiredate string,
    sal      string,
    comm     string,
    deptno   string
) stored as orc;

insert into test.emp
values (7369, 'SMITH', 'CLERK', 7902, 1980 - 12 - 17, 800.00, null, 20),
       (7499, 'ALLEN', 'SALESMAN', 7698, 1981 - 02 - 20, 1600.00, 300.00, 30),
       (7521, 'WARD', 'SALESMAN', 7698, 1981 - 02 - 22, 1250.00, 500.00, 30),
       (7566, 'JONES', 'MANAGER', 7839, 1981 - 04 - 02, 2975.00, null, 20),
       (7654, 'MARTIN', 'SALESMAN', 7698, 1981 - 09 - 28, 1250.00, 1400.00, 30),
       (7698, 'BLAKE', 'MANAGER', 7839, 1981 - 05 - 01, 2850.00, null, 30),
       (7782, 'CLARK', 'MANAGER', 7839, 1981 - 06 - 09, 2450.00, null, 10),
       (7788, 'SCOTT', 'ANALYST', 7566, 0087 - 07 - 13, 3000.00, null, 20),
       (7839, 'KING', 'PRESIDENT', null, 1981 - 11 - 17, 5000.00, null, 10),
       (7844, 'TURNER', 'SALESMAN', 7698, 1981 - 09 - 08, 1500.00, 0.00, 30),
       (7876, 'ADAMS', 'CLERK', 7788, 0087 - 07 - 13, 1100.00, null, 20),
       (7900, 'JAMES', 'CLERK', 7698, 1981 - 12 - 03, 950.00, null, 30),
       (7902, 'FORD', 'ANALYST', 7566, 1981 - 12 - 03, 3000.00, null, 20),
       (7934, 'MILLER', 'CLERK', 7782, 1982 - 01 - 23, 1300.00, null, 10);

select *
from test.emp;

 

复制好大佬的py文件 放到hdfs

 hive里添加py  add file hdfs://s2cluster/tmp/hive/cc/cc.py;

 使用transform函数

 报错了!!。

这个时候有两种解决办法

1.修改hive源码  注释如下,然后打包重新运行即可

hive 开启 python udf - 简书

我是用的使cdp的hive。不敢随便乱改

2.为什么会这里抛异常呢?  安全问题。。。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle中,MERGE INTO语句可以将数据从一个表复制到另一个表,同时执行插入、更新和删除操作。如果你想要在Hive实现类似的功能,可以使用INSERT OVERWRITE语句和Hive的JOIN操作。 假设你有两个Hive表:table1和table2,它们具有相同的列名称和数据类型。你可以按照以下步骤使用INSERT OVERWRITE和JOIN来实现类似于Oracle MERGE INTO语句的操作: 1. 首先使用INSERT OVERWRITE语句将table2中的数据覆盖到table1中: ``` INSERT OVERWRITE TABLE table1 SELECT t2.* FROM table2 t2; ``` 2. 接下来,使用LEFT OUTER JOIN和WHERE子句来查找需要更新的记录: ``` UPDATE table1 SET column1 = t2.column1, column2 = t2.column2, ... FROM table1 t1 LEFT OUTER JOIN table2 t2 ON t1.key_column = t2.key_column WHERE t2.key_column IS NOT NULL; ``` 这将使用table2中匹配的行更新table1中的行。请注意,我们在LEFT OUTER JOIN中使用了WHERE子句来查找匹配的行,并排除了那些没有匹配的行。 3. 最后,使用NOT EXISTS和INSERT INTO语句来插入在table1中不存在的新行: ``` INSERT INTO TABLE table1 SELECT t2.* FROM table2 t2 WHERE NOT EXISTS ( SELECT 1 FROM table1 t1 WHERE t1.key_column = t2.key_column ); ``` 这将从table2中选择那些在table1中不存在的记录,并将它们插入到table1中。 需要注意的是,Hive中的INSERT OVERWRITE和INSERT INTO语句不能在同一个语句中使用,因此我们必须将它们分开使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值