【问题标题】:Amazon Athena: no viable alternative at inputAmazon Athena:输入没有可行的替代方案
【发布时间】:2017-04-16 04:14:06
【问题描述】:

在 Athena 中创建表时;它给了我以下异常:

输入没有可行的替代方案

【问题讨论】:

  • 在我的例子中,表名不能从数字开始,它必须是字母。

标签: amazon-web-services amazon-athena


【解决方案1】:

在这里搜索并关注所有好的答案后。 我的问题是在 Node.js 中工作我需要删除可选的 ESCAPED BY '\' 在行设置中使用以使我的查询正常工作。希望这对其他人有所帮助。

【讨论】:

    【解决方案2】:

    不幸的是,目前 Athena 中的语法验证错误消息的描述性不是很好,这个错误可能意味着“几乎”任何可能在 create table 语句中出现的语法错误。

    虽然目前这很烦人,但您需要检查语法是否遵循Create table documentation

    一些例子是:

    • 反引号不在位(如前所述)
    • 缺少/多余的逗号(请记住,最后一列不需要在列定义后加逗号
    • 缺少空格
    • 更多..

    【讨论】:

    • 我的“更多..”是一个额外的>
    • 我的 DDL 缺少逗号。幸运的是,错误给出了开头要查看的行号。
    • 我错误地在属性名称中提供了一个空格。基本上,抛出的错误表明查询的语法有任何问题,这就是我的看法。
    • 谢谢!对了,创建表文档移到docs.aws.amazon.com/athena/latest/ug/create-table.html
    • 我的“更多..”是非破坏空间 \xa0 而不是常规空间。 @Nirmal 错误中提到的行号具有误导性!
    【解决方案3】:

    正如其他用户所指出的,Athena 提供的标准语法验证错误消息并不是特别有用。彻底检查其他用户提到的所需 DDL 语法(请参阅 HIVE data types reference)可能非常乏味,因为它相当广泛。

    因此,另一个故障排除技巧让 AWS 自己的数据解析引擎 (AWS Glue) 提示您 DDL 可能在哪里关闭。这里的想法是让 AWS Glue 使用自己的内部规则解析数据,然后向您展示您可能在哪里犯了错误。

    具体来说,以下是对我的 DDL 语句进行故障排除的步骤,这给我带来了很多麻烦:

    1. AWS Glue中创建数据爬虫; AWS 和许多其他地方都经历了这需要的非常详细的步骤,所以我不会在这里重复它
    2. 将抓取工具指向您想要(但未能)上传到 Athena 的相同数据
    3. 将爬虫输出设置为表(在您已经创建的 Athena 数据库中)
    4. 运行爬虫并等待创建填充数据的表
    5. 在 Athena Query Editor 选项卡中找到新创建的表,单击三个垂直点 (...),然后选择“Generate Create Table DLL”:
    6. 这将使 Athena 为该表创建保证有效的 DLL(因为该表已经使用该 DLL 创建)
    7. 查看此 DLL,看看它是否/在哪里/如何与您最初编写的 DLL 不同。自然,这个自动生成的 DLL 不会对您可能觉得有用的数据类型进行准确的选择,但至少您会知道它是 100% 有效的
    8. 最后,根据这个新的 Glue/Athena 生成的 DLL 更新您的 DLL,为您的特定用例调整列/字段名称和数据类型

    【讨论】:

      【解决方案4】:

      由于查询中有 cmets,这发生在我身上。

      当我尝试“格式化查询”按钮时,我意识到这是一种可能性,它把整个事情变成了几乎 1 行,大部分都被注释掉了。我的猜测是查询解析器会在将查询发送到 Athena 之前运行此格式化程序。

      移除 cmets,运行查询,天使长出了翅膀!

      【讨论】:

        【解决方案5】:

        第一次使用 UI 时对我来说并不明显的是,如果您在创建表“向导”中遇到错误,您可以取消,并且应该有使用的查询失败写入新的查询窗口,供您编辑和修复。

        我的数据库有一个连字符,所以我在查询中添加了反引号并重新运行它。

        【讨论】:

          【解决方案6】:

          斜线。我的是斜线。我有来自 Athena 的 DDL,保存为 python 字符串。

          WITH SERDEPROPERTIES ( 
            'escapeChar'='\\', 
            'quoteChar'='\"',
            'separatorChar'=',')  
          

          改为

          WITH SERDEPROPERTIES ( 
            'escapeChar'='\', 
            'quoteChar'='"',
            'separatorChar'=',')
          

          一切都崩溃了。

          必须成功:

          WITH SERDEPROPERTIES (
            'escapeChar'='\\\\', 
            'quoteChar'='\\\"',
            'separatorChar'=',')
          

          【讨论】:

          【解决方案7】:

          我的情况:这是一个外部表,位置有错字(因此不存在)

          几个提示:

          【讨论】:

            【解决方案8】:

            这个错误一般发生在DDL的语法有一些愚蠢的错误时。有几个答案可以根据那里的状态解释不同的错误。解决这个问题的简单方法是耐心查看DDL和逐行验证以下几点:-

            1. 检查缺少的逗号
            2. 不平衡的`(反引号运算符)
            3. HIVE(HIVE DATA TYPES REFERENCE) 不支持不兼容的数据类型
            4. 不平衡的逗号
            5. 表名中的连字符

            【讨论】:

              【解决方案9】:

              就我而言,根据 AWS 文档,其中一个表列名称用单引号括起来:( ('bucket')

              【讨论】:

                【解决方案10】:

                在我的情况下,这是因为表中最后一列后面的逗号。例如:

                CREATE EXTERNAL TABLE IF NOT EXISTS my_table (
                  one STRING,
                  two STRING,
                ) LOCATION 's3://my-bucket/some/path';
                

                在我删除two STRING, 末尾的逗号后,它工作正常。

                【讨论】:

                  【解决方案11】:

                  就我而言,我缺少 S3 URL 的单引号

                  【讨论】:

                    【解决方案12】:

                    在我的例子中,它是 PARTITIONED BY 部分中的一个额外逗号

                    【讨论】:

                      【解决方案13】:

                      表名中不允许使用连字符..(尽管向导允许)..只需删除连字符,它就像一个魅力

                      【讨论】:

                      • 就我而言,这是因为我以数字开头的表名:2017_04_03_some_data。我改成some_data_20170403,它成功了。
                      • 我在尝试创建包含连字符的列名的表时遇到了同样的错误'-'
                      • 在我的例子中,它来自于 DDL 中的 COMMENT 条目。删除后工作。
                      • 在我的情况下,) 最后丢失了。 :)
                      • 数据库中也不能有连字符。
                      猜你喜欢
                      • 1970-01-01
                      • 2020-05-06
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-01-30
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2017-11-29
                      相关资源
                      最近更新 更多