当我使用 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 表中推断架构,请完成以下步骤:
- 使用 AWS Glue 爬网程序创建 AWS Glue 表。
- 查看 DynamoDB 表架构,确保爬网程序正确发现了相关数据。
- 使用 columnMapping 属性来防止丢失数据列。
**注意:**数据库名称、表名称和列名称的长度不能超过 255 个字符。可接受的字符包括小写字母、数字和下划线。
使用 AWS Glue 爬网程序创建 AWS Glue 表
完成以下步骤:
- 打开 AWS Glue 控制台。
- 在导航窗格的数据目录下,选择爬网程序。
- 在爬网程序界面,选择创建爬网程序。
- 在设置爬网程序属性页面的爬网程序详细信息下,输入爬网程序的名称。然后,选择下一步。
- 对于数据源配置,选择还没有。然后,选择添加数据源。
- 在添加数据源对话框中,输入以下信息:
对于数据源,选择 DynamoDB。
在表名称中,输入您的 DynamoDB 表的名称。
选择添加 DynamoDB 数据源。然后,选择下一步。
- 在配置安全设置页面上,在 IAM 角色下,选择现有的 IAM 角色。或者,选择创建新的 IAM 角色。然后,选择下一步。
**注意:**IAM 角色必须拥有所需的权限。
- 在设置输出和计划页面上,在输出配置下,选择添加数据库。系统将在创建数据库页面显示一个新选项卡。
- 在创建数据库页面上,输入以下信息:
对于名称,输入您的数据库名称。
对于位置,将该值设置为 dynamo-db-flag。然后,选择创建数据库。返回设置输出和计划选项卡。
**注意:**要让 Athena 识别该表,必须使用与 dynamo-db-flag 相同的值。
- 在设置输出和计划页面上,对于目标数据库,选择您的数据库。然后,选择下一步。
- 选择创建爬网程序。
- 在爬网程序页面上,选择运行爬网程序。
查看表架构
完成以下步骤:
- 打开 AWS Glue 控制台。
- 在导航窗格的数据目录下,选择数据库。
- 选择您的数据库。
- 在表下,选择您的表。
- 查看该列以确保能够正确发现列和数据类型。
配置 columnMapping 属性
注意:列映射参数仅适用于顶层列名。它们不适用于嵌套字段。
完成以下步骤:
- 打开 AWS Glue 控制台。
- 在导航窗格的数据目录下,选择表。
- 在表页面上,选择您的表。
- 选择操作,然后选择编辑表。
- 在编辑表页面的表属性下,选择添加,然后输入以下信息:
在键字段中,输入 columnMapping。
在值字段中,按以下格式输入列名称:映射值=列名。
例如,您的表包含以下列:firstName、Lastname、Age 和 region。使用以下 columnMapping 属性值格式:
firstname=firstName
lastname=Lastname
age=Age
region=region
- 打开 Amazon Athena 控制台。
- 在查询编辑器页面上,针对数据输入以下信息:
对于数据源,输入 DynamoDB。
对于数据库,选择您的数据库。
通用用户错误
您可能会收到“GENERIC_USER_ERROR: Encountered an exception”错误。当您的 DynamoDB 表的列中的数据与 Athena 不兼容时,可能会发生此错误。要解决此问题,请将表中的数据更改为与 Athena 兼容的类型。
要更改表中的数据类型,请完成以下步骤:
- 打开 AWS Glue 控制台。
- 在导航窗格的数据目录下,选择表。
- 在表页面上,选择要更新的表。
- 在架构下,选择编辑架构。
- 选择包含不兼容数据的列,然后选择编辑。
- 对于数据类型,选择与 Athena 兼容的数据类型。然后,选择保存。
- 选择另存为新表版本。
- 打开 Athena 控制台。
- 在查询编辑器上,再次运行查询。
相关信息
Best practices when using Athena with AWS Glue