如何将 nvarchar 从 T-SQL 方言转换为 hiveQL?
Posted
技术标签:
【中文标题】如何将 nvarchar 从 T-SQL 方言转换为 hiveQL?【英文标题】:how to convert nvarchar from T-SQL dialect to hiveQL? 【发布时间】:2020-10-05 11:55:40 【问题描述】:我正在执行将查询从一种 SQL 方言转换为另一种的 ETL 任务。旧的 db 使用 T-Sql,新的是 hiveQL。
SELECT CAST(CONCAT(FMH.FLUIDMODELID,'_',RESERVOIR,'_',PRESSUREPSIA) AS NVARCHAR(255)) AS FACT_RRFP_INJ_PRESS_R_PHK
, FMH.FluidModelID ,FMH.FluidModelName ,[AnalysisDate]
FROM dbo.LZ_RRFP_FluidModelInj fmi
LEFT JOIN DBO.LZ_RRFP_FluidModelHeader fmh ON fmi.FluidModelIDFK = fmh.FluidModelID
LEFT JOIN LZ_RRFP_FluidModelAss fma on fma.InjectionFluidModelIDFK = fmi.FluidModelIDFK
WHERE FMA.RESERVOIR IN (SELECT RESERVOIR_CD FROM ATT_RESERVOIR)
错误是:
org.apache.spark.sql.catalyst.parser.ParseException:
DataType nvarchar(255) is not supported.
如何转换nvarchar?
【问题讨论】:
你为什么使用 CAST?如果这个 SELECT 语句是独立的,那么它什么也做不了;如果它是更大语句的一部分,例如 INSERT... SELECT 那么,如果需要 CAST,则强制转换为目标列类型,即 STRING 【参考方案1】:Hive 在 STRING 和 VARCHAR 中使用 UTF-8,您可以使用 VARCHAR
或 STRING
而不是 NVARCHAR
。
VARCHAR
在 Hive 中与 STRING + 长度验证相同。正如评论中提到的@NickW,您完全可以不使用CAST
来执行相同的操作,如果您使用VARCHAR(255)
将结果插入到表中,那么它在不使用CAST 的情况下也可以正常工作。
【讨论】:
以上是关于如何将 nvarchar 从 T-SQL 方言转换为 hiveQL?的主要内容,如果未能解决你的问题,请参考以下文章