【发布时间】:2021-09-14 11:51:07
【问题描述】:
我们有两个表,其中一个列的数据类型不同。第一个表中的列的类型为int,而第二个表中的同一列的类型为float/real。如果它是一个裸列,我可以将 CAST'ed 转换为一个通用类型,这里的问题是,这些列在 struct 的深处。
我得到的错误是,
SYNTAX_ERROR: line 23:1: column 4 in row(priceconfiguration row(maximumvalue integer, minimumvalue integer, type varchar, value integer)) 查询有不兼容的类型:Union, row(priceconfiguration row(maximumvalue integer, minimumvalue integer, type varchar,实数))
查询(简化)是,
WITH t1 AS (
SELECT
"so"."createdon"
, "so"."modifiedon"
, "so"."deletedon"
, "so"."createdby"
, "so"."priceconfiguration"
, "so"."year"
, "so"."month"
, "so"."day"
FROM
my_db.raw_price so
UNION ALL
SELECT
"ao"."createdon"
, "ao"."modifiedon"
, "ao"."deletedon"
, "ao"."createdby"
, "ao"."priceconfiguration"
, "ao"."year"
, "ao"."month"
, "ao"."day"
FROM
my_db.src_price ao
)
SELECT t1.* FROM t1 ORDER BY "modifiedon" DESC
事实上,真正的表比这更复杂,priceconfiguration 列嵌套在表的深处。所以 CASTing 有问题的列是直接不可能的,除非所有的 structs 都未嵌套到有问题的列 CAST。
有没有UNION这两个表没有unnesting和casting的方法?
【问题讨论】:
-
将整个
struct列转换为string。如果您需要再次进入该结构,您可以将其转换回来,将麻烦的value字段设置为string。
标签: hiveql amazon-athena presto