问题描述
我正在执行ETL任务,将查询从一种sql语言转换为另一种sql语言。旧数据库使用T-sql,新数据库使用hiveQL。
dateList <- c("202001","202002")
dateList <- paste0(dateList,"1")
dateList <- as.Date(dateList,format = "%Y%W%u")
错误是:
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)
如何转换nvarchar?
解决方法
Hive在STRING和VARCHAR中使用UTF-8,可以使用VARCHAR
或STRING
代替NVARCHAR
。
VARCHAR
与STRING +长度验证相同。正如评论中提到的@NickW一样,您完全可以不使用CAST
来执行相同的操作,如果将结果插入到带有VARCHAR(255)
的表中,则无需CAST也可以使用相同的功能。