Apache Calcite设置时区参数无效,如何获取UTC时间?
解决Apache Calcite中获取UTC时间的问题
方法1:直接在查询中做时区转换
绕过会话时区设置,直接对时间函数结果做UTC转换,这是最直接的方式:
-- 获取带日期的UTC时间戳 SELECT CURRENT_TIMESTAMP AT TIME ZONE 'UTC' AS utc_timestamp; -- 仅获取UTC时间部分 SELECT CAST(CURRENT_TIMESTAMP AT TIME ZONE 'UTC' AS TIME) AS utc_time;
方法2:在CSV Schema配置中指定时区
连接字符串的timeZone参数对CSV适配器不生效,需要将时区配置放在Schema的operand中,修改你的model.json配置文件:
{ "version": "1.0", "defaultSchema": "csv", "schemas": [ { "name": "csv", "type": "custom", "factory": "org.apache.calcite.adapter.csv.CsvSchemaFactory", "operand": { "directory": "你的CSV文件路径", "timeZone": "UTC" } } ] }
配置完成后,CURRENT_TIME和LOCALTIME会返回UTC时区的时间。
方法3:通过JVM参数全局设置时区
启动运行Calcite的Java程序时,添加以下JVM参数,强制全局时区为UTC:
-Duser.timezone=UTC
该方式会影响JVM内所有时间相关操作,包括Calcite的时间函数。
内容的提问来源于stack exchange,提问作者Afsal
相关产品推荐
相关产品推荐

