【问题标题】:Glue Crawler/Athena array of strings handlingGlue Crawler/Athena 字符串处理数组
【发布时间】:2022-11-10 18:28:59
【问题描述】:

我正在尝试使用 Glue 爬虫从我的 CSV 文件中检索字符串数组。一旦爬虫爬取了我的数据并生成了数据目录表,我就使用 Athena 来查询我的数据。问题是 Athena(或者可能是由于 Glue)无法正确提取我的字符串数组。

这是我的 CSV 文件的格式,特别是字符串数组字段。它用双引号括起来:

"['ESLCG', 'PTLEI', 'PTLIS', 'ESBIO', 'FRLRH', 'FRLEH', 'BEZEE', 'NLIJM']"

我通过 Glue 控制台手动创建 Glue 爬虫。不幸的是,数据目录表定义将该字段识别为字符串而不是字符串数组。更糟糕的是,当我执行 Athena 查询时,Athena 将上述字段值返回为:

"['ESLCG'

剩余的字符串值然后流血到下一个字段,因此下一个字段的值为:

'PTLEI'

剩余的字段从字符串数组中获取剩余的字符串。因此,它破坏了对剩余字段的处理。

我想使用 Glue/Athena 的内置功能,而不是做任何自定义。我还使用不同的值修改了以下 serde 属性,注意 Glue 爬虫确定使用 org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe 序列化程序库:

field.delim - I've tried single and double quotes
collection.delim - ,
colelction.delim - ,
quote.delim - I've tried single and double quotes

不幸的是,修改和添加 serde 属性不起作用。此外,Glue 不允许自定义 serde...

我究竟做错了什么?

【问题讨论】:

    标签: aws-glue amazon-athena glue-crawler


    【解决方案1】:

    我能够通过在定义为数组的字段中使用管道分隔符和逗号分隔的字符串来完成这项工作。使用此配置,您可以避免引号转义,这似乎会破坏事情。

    field1|field2a,field2b|field3
    

    这是我的 org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe 表参数:

    爬虫工作正常,这在 Athena 中是可查询的。请注意,我确实尝试过使用其他数组类型(如数组和数组),但它们无法正常工作。

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 2020-02-13
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      相关资源
      最近更新 更多