Presto SQL:使用由于查询而来的时区字符串更改时区不起作用

时间:2018-09-08 00:13:41

标签: sql postgresql timezone amazon-athena presto

我正在通过Mode Analytics Platform连接到AWS Athena,并使用其查询引擎(基于Presto 0.172)查询表。该表public.zones的时区信息存储在我感兴趣的某些区域的名为time_zone的列中,并存储为varchar

例如,如果我输入:

SELECT time_zone 
FROM public.zones
LIMIT 4;

我得到了(如预期的那样):

time_zone
----------  
US/Pacific 
US/Eastern 
US/Eastern 
US/Eastern 

我可以运行以下测试查询:

SELECT 
  timestamp '2017-06-01 12:34:56.789' AT TIME ZONE 'US/Eastern' AS time_eastern,
  time_zone 
FROM public.zones
LIMIT 4;

我得到了(如预期)

time_eastern                        time_zone
----------------------------------  ----------
2017-06-01 08:34:56.789 US/Eastern  US/Pacific
2017-06-01 08:34:56.789 US/Eastern  US/Eastern
2017-06-01 08:34:56.789 US/Eastern  US/Eastern
2017-06-01 08:34:56.789 US/Eastern  US/Eastern

现在,我想在我从区域表中查询的不同时区中代表相同的时间字符串'2017-06-01 12:34:56.789'。我希望以下查询能够运行。 (它在PostgreSQL上运行)。

SELECT 
  timestamp '2017-06-01 12:34:56.789' AT TIME ZONE time_zone AS time_custom,
  time_zone 
FROM public.zones
LIMIT 4;

我收到以下错误:

[Simba][AthenaJDBC](100071) An error has been thrown from the AWS Athena client. 
line 2:52: no viable alternative at input 'TIME ZONE time_zone'

这在Presto SQL / AWS Athena查询引擎中不起作用的原因是什么?

任何人都可以建议任何解决方法,或者我的语法错误是什么?

1 个答案:

答案 0 :(得分:1)

当前, Visio.Documents visioDocs = this.Application.Documents; // Get Basic Shapes Stencil Visio.Document visioStencil = visioDocs.OpenEx("Basic Shapes.vss", (short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenDocked); //Get Rectangle Shape Visio.Master visioRectMaster = visioStencil.Masters.get_ItemU(@"Rectangle"); // Add Shape to Page Visio.Shape visioRectShape = visioPage.Drop(visioRectMaster, rectX, rectY); visioRectShape.NameU = "ShapeName"; 仅接受文字或间隔。预期的行为尚未实现。您可以在此处跟踪相关问题:https://github.com/prestosql/presto/issues/135

作为一种解决方法,您可以将时间戳值转换为varchar,与zone连接,并转换为带有时区的时间戳。

AT TIME ZONE

(注意:已在Presto 0.210上进行了测试。如果在雅典娜上尚无法使用,请告诉我。)