我使用 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 中的问号
- 复制爬网程序 DDL 语句 (SHOW CREATE TABLE table_name)。
- 删除问号。
- 运行语句。
注意:务必在表属性中包括 'skip.header.line.count'='1'。
删除 AWS Glue 中的问号
- 打开 AWS Glue 控制台。
- 选择您的表。
- 在 Action (操作) 下拉菜单中,选择 View details (查看详细信息)。
- 选择 Edit schema (编辑架构)。
- 选择第一列,然后重命名。如果您愿意,可以为该列使用相同的名称。
注意:输入名称后,即使您在控制台中可能看不到问号,AWS Glue 也会删除问号。 - 在页面右上角中,选择 Save (保存)。
配置 AWS Glue 以不重建表架构
在同一个表上再次运行爬网程序之前:
- 在 AWS Glue 控制台上,选择爬网程序,然后选择您的爬网程序。
- 选择操作下拉菜单,然后选择编辑爬网程序。
- 选择输出。
- 展开配置选项。
- 选择如果爬网程序检测到数据存储的架构更改,AWS Glue 如何处理数据目录中的表更新?下的以下选项
忽略更改,不更新数据目录中的表。
使用表中的元数据更新所有新的和现有的分区。 - 在 AWS Glue 如何处理数据存储中的已删除对象?下,选择从数据目录中删除表和分区。
- 选择下一步,然后选择完成。