使用AWS胶水搜寻器 /分类器 / ETL作业的数组弄平json



我在json文件(这是有效的JSON)爬行的S3 Data Lake。内部有2个字段(设备,时间戳)和一个称为"数据"的对象。数据数组中的每个对象彼此不同。

{
  "device": "0013374838793C8",
  "timestamp": "2019-03-04T14:44:39Z",
  "data": [
    { "eparke_status": "09" },
    { "eparke_x": "FFF588" },
    { "eparke_y": "000352" },
    { "eparke_z": "000ACC" },
    { "eparke_temp": "14.00" },
    { "eparke_voltage": "4.17" }
  ]
}

不幸的是,当我与AWS胶水爬网架爬行时,无法正确推断出,我在雅典娜中得到的不是我所期望的。

列表以下显示了AWS雅典娜的一排数据。

1   0013374838793C8 2019-03-05T13:11:41Z    [{eparke_status=0B, eparke_x=null, eparke_y=null, eparke_z=null, eparke_temp=null, eparke_voltage=null}, {eparke_status=null, eparke_x=FFF6D4, eparke_y=null, eparke_z=null, eparke_temp=null, eparke_voltage=null}, {eparke_status=null, eparke_x=null, eparke_y=000133, eparke_z=null, eparke_temp=null, eparke_voltage=null}, {eparke_status=null, eparke_x=null, eparke_y=null, eparke_z=000DA3, eparke_temp=null, eparke_voltage=null}, {eparke_status=null, eparke_x=null, eparke_y=null, eparke_z=null, eparke_temp=14.00, eparke_voltage=null}, {eparke_status=null, eparke_x=null, eparke_y=null, eparke_z=null, eparke_temp=null, eparke_voltage=4.17}]

正如您可以看到阵列架构中的每个对象的那样,发现了"错误"。数据库中的每一列都包含所有数组对象字段,其中大多数只是设置为空物,这是可以理解的,因为找不到它们。发现的模式不是我要寻找的。
期望

以下列表显示预期用AWS胶水爬行后表行的形式。

1   0013374838793C8 2019-03-05T13:11:41Z    eparke_status=0B eparke_x=FFF6D4 eparke_y=000133 eparke_z=000DA3 eparke_temp=14.00 eparke_voltage=4.17

我到目前为止尝试了什么?

AWS胶水分类器为了强制模式,我尝试使用分类器。

$.device $.timestamp $.eparke_status $.eparke_x $.eparke_y $.eparke_z $.eparke_temp $.eparke_voltage

$.device $.timestamp $.data[0].eparke_status $.data[1].eparke_x $.data[2].eparke_y $.data[3].eparke_z $.data[4].eparke_temp $.data[5].eparke_voltage

仍然,最终模式看起来相同 - 所有对象都包装在每列内部。

有什么想法如何解决这个问题?我还试图使用自定义脚本配置ETL作业,但到目前为止都失败了。

我注意到的一件事是,一旦爬行者运行一次,最初推断出的模式和选定的爬网往往会在新运行中不变。我只是认为复制爬行者并在播放时删除所有先前创建的桌子是更安全的。

我不确定您是否可以在JSON分类器表达式中加入多个词根表达式。文档显示,对于JSON分类器,您只需要提供通往每条线节点的路径,这将被视为实际的JSON,可以从

中推断该架构

要使用数组的每个元素来推断模式,您必须使用$ .data [*]。但这意味着您会错过设备和时间戳。

您不能仅仅通过爬网做到这一点。我的建议是在没有自定义分类器的情况下解析,然后使用Athena查询(https://docs.aws.amazon.com/athena/lateste/latest/latest/ug/flattening-arlays.html)来解开阵列结构中的数据。如果需要,将结果加载到一些数据存储。对于S3,将CTA视为一种选项。您可能还可以将其配置为ETL作业

最新更新