如何解决 Athena DynamoDB 连接器出现的“Column not found”错误?

2 分钟阅读
0

当我使用 Amazon Athena DynamoDB 连接器时,遇到“Column not found”错误。

简短描述

出现“Column not found”错误是由于 Athena DynamoDB 连接器的内置架构推断功能有限。Athena DynamoDB 连接器使用 AWS Lambda 函数来推断表架构。然后,它只分析表中的一部分样本数据。

由于该函数仅分析一部分样本数据,因此得到的架构可能会遗漏样本数据中没有的列数据。Amazon DynamoDB 表中格式不正确的数据也会导致“Column not found”错误。

重要信息:

  • DynamoDB 表不能包含驼峰式大小写、大写字母或 Athena 不支持的数据类型。
  • AWS Glue 和 Athena 无法读取除下划线以外的驼峰字母、大写字母或特殊字符。

解决方法

要使用 AWS Glue 从 DynamoDB 表中推断架构,请完成以下步骤:

  1. 使用 AWS Glue 爬网程序创建 AWS Glue 表
  2. 查看 DynamoDB 表架构,确保爬网程序正确发现了相关数据。
  3. 使用 columnMapping 属性来防止丢失数据列。

**注意:**数据库名称、表名称和列名称的长度不能超过 255 个字符。可接受的字符包括小写字母、数字和下划线。

使用 AWS Glue 爬网程序创建 AWS Glue 表

完成以下步骤:

  1. 打开 AWS Glue 控制台
  2. 在导航窗格的数据目录下,选择爬网程序
  3. 爬网程序界面,选择创建爬网程序
  4. 设置爬网程序属性页面的爬网程序详细信息下,输入爬网程序的名称。然后,选择下一步
  5. 对于数据源配置,选择还没有。然后,选择添加数据源
  6. 添加数据源对话框中,输入以下信息:
    对于数据源,选择 DynamoDB
    表名称中,输入您的 DynamoDB 表的名称。
    选择添加 DynamoDB 数据源。然后,选择下一步
  7. 配置安全设置页面上,在 IAM 角色下,选择现有的 IAM 角色。或者,选择创建新的 IAM 角色。然后,选择下一步
    **注意:**IAM 角色必须拥有所需的权限
  8. 设置输出和计划页面上,在输出配置下,选择添加数据库。系统将在创建数据库页面显示一个新选项卡。
  9. 创建数据库页面上,输入以下信息:
    对于名称,输入您的数据库名称。
    对于位置,将该值设置为 dynamo-db-flag。然后,选择创建数据库。返回设置输出和计划选项卡。
    **注意:**要让 Athena 识别该表,必须使用与 dynamo-db-flag 相同的值。
  10. 设置输出和计划页面上,对于目标数据库,选择您的数据库。然后,选择下一步
  11. 选择创建爬网程序
  12. 在爬网程序页面上,选择运行爬网程序

查看表架构

完成以下步骤:

  1. 打开 AWS Glue 控制台
  2. 在导航窗格的数据目录下,选择数据库
  3. 选择您的数据库。
  4. 下,选择您的表。
  5. 查看该列以确保能够正确发现列和数据类型。

配置 columnMapping 属性

注意:列映射参数仅适用于顶层列名。它们不适用于嵌套字段。

完成以下步骤:

  1. 打开 AWS Glue 控制台
  2. 在导航窗格的数据目录下,选择
  3. 页面上,选择您的表。
  4. 选择操作,然后选择编辑表
  5. 编辑表页面的表属性下,选择添加,然后输入以下信息:
    字段中,输入 columnMapping
    字段中,按以下格式输入列名称:映射值=列名。
    例如,您的表包含以下列:firstName、Lastname、Age 和 region。使用以下 columnMapping 属性值格式:
    firstname=firstName
    lastname=Lastname
    age=Age
    region=region
  6. 打开 Amazon Athena 控制台
  7. 查询编辑器页面上,针对数据输入以下信息:
    对于数据源,输入 DynamoDB
    对于数据库,选择您的数据库。

通用用户错误

您可能会收到“GENERIC_USER_ERROR: Encountered an exception”错误。当您的 DynamoDB 表的列中的数据与 Athena 不兼容时,可能会发生此错误。要解决此问题,请将表中的数据更改为与 Athena 兼容的类型。

要更改表中的数据类型,请完成以下步骤:

  1. 打开 AWS Glue 控制台
  2. 在导航窗格的数据目录下,选择
  3. 页面上,选择要更新的表。
  4. 架构下,选择编辑架构
  5. 选择包含不兼容数据的列,然后选择编辑
  6. 对于数据类型,选择与 Athena 兼容的数据类型。然后,选择保存
  7. 选择另存为新表版本
  8. 打开 Athena 控制台
  9. 查询编辑器上,再次运行查询。

相关信息

Best practices when using Athena with AWS Glue

AWS 官方已更新 1 年前