PLSQL 到 Hive 查询函数的对话
Posted
技术标签:
【中文标题】PLSQL 到 Hive 查询函数的对话【英文标题】:PLSQL to Hive Query Function Conversation 【发布时间】:2021-03-15 15:46:13 【问题描述】:我们正在尝试将 greenplum(postgresql) 迁移到 hive 和以下 plsql 查询需要转换为 hiveSQL。请帮帮我。
Greenplum函数查询语句。
select extract(days from ((date_trunc('MONTH', column1::date) + INTERVAL '1 MONTH - 1 day')::date)))::dec,2)::numeric daily;
select extract(year from column1)::character varying;
select extract(month from column2)::character varying;
注意:从 hive 中提取的天数不可用。请帮助我们。
我们需要转换 HiveSQL。
【问题讨论】:
【参考方案1】:extract
在 hive 2.2 及更高版本中可用。
你可以看到下面的sql的输出。
select extract(day from current_date) dy,extract(month from current_date) mon,
extract(year from current_date) yr
现在回答您的问题,
select extract(days from ((date_trunc('MONTH', column1::date) + INTERVAL '1 MONTH - 1 day')::date)))::dec,2)::numeric daily;
我认为这是一个月的最后一天。您可以使用extract(day from last_day(column1))
select extract(year from column1)::character varying;
您可以使用cast ( extract(year from column1) as string)
请注意 hive 对数据类型非常敏感,在这两种情况下我都假定列为日期时间。
【讨论】:
cast(extract(day from (cast(date_add(add_months(trunc(cast('2021-03-16'as date),'MM'),1),-1) as date) )) 作为十进制) 作为 bigint) daily_tgt -- 这不起作用 您好,我们使用的是 2.1.1-cdh6.3.2 版本的 hive,请帮助我们。 一些演员表似乎没有必要。你能告诉我逻辑和例子吗? 我试过但需要验证请检查这个查询是否正确? select extract(days from ((date_trunc('MONTH', column1::date) + INTERVAL '1 MONTH - 1 day')::date)))::dec,2)::numeric daily; ====>>> cast(day(date_add(add_months(from_unixtime(unix_timestamp(cast('2021-02-12' as date),'yyyy-MM'),'yyyy-MM-dd'),1) , -1)) as int) daily_tgt以上是关于PLSQL 到 Hive 查询函数的对话的主要内容,如果未能解决你的问题,请参考以下文章