我使用 AWS Glue 爬网程序从 CSV 文件创建了 Amazon Athena 表。当我查询表的第一列时,我收到类似于以下内容的错误消息:“SYNTAX_ERROR: line 1:9: Column 'column_id' cannot be resolved. (SYNTAX_ERROR: 第 1:9 行:无法解析列‘column_id’。)”

当您的 CSV 文件以 UTF-8 格式编码并带有字节顺序标记 (BOM) 时,通常会发生此错误。AWS Glue 无法识别 BOM 并将 BOM 更改为多个问号,而 Amazon Athena 无法识别这些问号。

要解决语法错误,请删除 Athena 或 AWS Glue 中的问号。

字节顺序标记会自动添加到第一列的名称的开头。要查看字节顺序标记,请在十六进制编辑器中打开文件。它将如下所示: 

         
1 POSTAL_CODE_START  POSTAL_CODE_START    NM_REGION REGION_CODE
2 69900001 69924999 AC - Capital 15

对文件运行 AWS Glue 爬网程序时,爬网程序会在字节顺序标记旁边添加一个问号。由于爬网程序使用列标题作为列名称,Athena 表中的第一列可能具有类似 ?POSTAL_CODE_START 的名称。(运行 SHOW CREATE TABLE 时可以看到问号。) 在 Athena 中,列名称不允许下划线 (_) 以外的特殊字符。

删除 Athena 中的问号

  1. 复制爬网程序 DDL 语句 (SHOW CREATE TABLE table_name)。
  2. 删除问号。
  3. 运行语句。
    注意:务必在表属性中包括 'skip.header.line.count'='1'

删除 AWS Glue 中的问号

  1. 打开 AWS Glue 控制台
  2. 选择您的表。
  3. Action (操作) 下拉菜单中,选择 View details (查看详细信息)
  4. 选择 Edit schema (编辑架构)
  5. 选择第一列,然后重命名。如果您愿意,可以为该列使用相同的名称。
    注意:输入名称后,即使您在控制台中可能看不到问号,AWS Glue 也会删除问号。
  6. 在页面右上角中,选择 Save (保存)

配置 AWS Glue 以不重建表架构

在同一个表上再次运行爬网程序之前:

  1. 在 AWS Glue 控制台上,选择爬网程序,然后选择您的爬网程序。
  2. 选择操作下拉菜单,然后选择编辑爬网程序
  3. 选择输出
  4. 展开​配置选项​。
  5. 选择如果爬网程序检测到数据存储的架构更改,AWS Glue 如何处理数据目录中的表更新?下的以下选项​
    忽略更改,不更新数据目录中的表。
    使用表中的元数据更新所有新的和现有的分区。
  6. AWS Glue 如何处理数据存储中的已删除对象?下,选择从数据目录中删除表和分区
  7. 选择下一步,然后选择完成

此页内容对您是否有帮助? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS Support 中心

发布时间:2019 年 1 月 7 日