在 Athena 中对 VIEW 的联合查询:不匹配的输入“来自”

问题描述

我有一个 sql 查询,我正尝试从中为 AWS Athena 构建 VIEW。 Select 语句有效,但是当我添加 CREATE 语句时,它开始出错。

line 12:1: 
mismatched input 'from' expecting {<eof>,'where','group','order','having','limit','lateral','window','union','except','intersect','sort','cluster','distribute'} (service: amazonathena; status code: 400; error code: invalidrequestexception; request id: 7740824a-5db1-4409-87bb-d70ab321734a; proxy: null)

到目前为止我所做的唯一更改是将左连接内的 FROM 更改为 FROM "sentryx"."public"."vw_last_create_dates"

我需要故障排除帮助以找出发生该错误的原因

  • Athena 是否允许联合查询来构建视图?
  • 我已经检查了整个查询中的大括号
  • 内部选择语句有效
CREATE OR REPLACE VIEW heatmap_backflow_alert_90days AS
SELECT  devicealerthistoryid,deviceid,latitude,longitude,alertcounter,alertsetdatetime,last_modify_date,AlertKey,sitename
FROM 
(
    SELECT  devicealerthistoryid,d.deviceid,COALESCE(datelastmodified,datecreated) last_modify_date,"concat"("lower"("replace"(cd.database,'ArkNET_')),'*',CAST(productalerttypeid AS varchar(12)),CAST(d.deviceid AS varchar(12)),'*me') AlertKey,"lower"("replace"(cd.database,'ArkNET_')) sitename,"row_number"() OVER (PARTITION BY da.devicealerthistoryid,da.database ORDER BY datelastmodified DESC) row_num
    FROM 
    (((metrology_consumption_base_db.devicealerthistory da
        INNER JOIN metrology_consumption_base_db.device d
        ON (da.productid = d.deviceid))
        INNER JOIN metrology_consumption_base_db.customerdevice cd
        ON (cd.deviceid = d.deviceid))
        LEFT JOIN 
        (
            SELECT  SITENAME,"max"(last_create_date) last_create_date
            FROM "sentryx"."public"."vw_last_create_dates"
            WHERE ("alert_type" = 'backflow') 
            GROUP BY  SITENAME 
        ) T4
        ON ("lower"("replace"(cd.database,'ArkNET_')) = T4.SITENAME)
    )
    WHERE ((((productalerttypeid = 10) AND (alertcleardatetime IS NULL)) AND (COALESCE(T4.SITENAME,cd.database) IS NOT NULL)) AND (COALESCE(datelastmodified,datecreated) > COALESCE(last_create_date,"date_parse"('2019-01-01','%Y-%m-%d'))))  
) T5
WHERE (row_num = 1) ; ```

解决方法

视图限制 Athena 视图名称不能包含特殊字符,下划线 (_) 除外。有关详细信息,请参阅表、数据库和列的名称。

避免使用保留关键字来命名视图。如果使用保留关键字,请在对视图的查询中使用双引号将保留关键字括起来。请参阅保留关键字。

-- 您不能将视图与联合数据源、外部 Hive 元存储或 UDF。

您不能使用具有地理空间功能的视图。

您不能使用视图来管理对 Amazon S3 中数据的访问控制。要查询视图,您需要访问存储在 Amazon S3 中的数据的权限。有关更多信息,请参阅访问 Amazon S3。