为什么我在处理日期时不能在别名中使用列名

jgwigjjp  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(401)

目前,我正在使用配置单元sql将一个数据库从sql\ U server迁移到spark。
我在尝试将数字传递到日期格式时遇到了一个问题。我发现答案是:

from_unixtime(unix_timestamp(cast(DATE as string) , 'dd-MM-yyyy'))

当我执行这个查询时,它会给我带来数据,请注意,我在列fecha的名称中放了一个不同的别名:

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(CAST(FECHA AS STRING ) ,'yyyyMMdd'), 'yyyy-MM-dd') AS FECHA_1
FROM reportes_hechos_avisos_diarios
LIMIT 1

|   FECHA_1    | 
| --------     |
| 2019-01-01   |

但当我把相同的别名作为列名时,它给我带来了不一致的信息:

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(CAST(FECHA AS STRING ) ,'yyyyMMdd'), 'yyyy-MM-dd')  AS FECHA
FROM reportes_hechos_avisos_diarios
LIMIT 1

|  FECHA   | 
| -------- |
| 2.019    |

我知道一个简单的答案是,放置一个与列名不同的别名,但是我在tableau中有一个实现,它从这个查询中获取信息,更改这个列很复杂,因为基本上我必须更改所有的实现,所以我需要保留列名。这个查询在sql server中对我有效,但我不知道为什么它在Hive里不起作用。发布预期结果
psdt:thanks for 请注意,这是我在stack中问的第一个问题,我的母语不是英语,如果我有语法错误,请原谅。

6tr1vspr

6tr1vspr1#

limit 1 没有 order by 由于并行执行导致行的顺序是随机的,因此从一个运行到另一个运行可能会产生不确定的结果,某些因素可能会以某种方式影响结果,但无法保证获得相同的行。
发生了什么-我猜你收到了不同的行,并且该行中的日期已损坏,这就是为什么会返回一些奇怪的结果。
此外,还可以使用其他转换方法:

select date(regexp_replace(cast(20200101 as string),'(\\d{4})(\\d{2})(\\d{2})','$1-$2-$3')) --put your column instead of constant.

结果:

2020-01-01

相关问题